Scala模式匹配常用

时间:2022-05-24 04:09:23

今天在工作中遇到的几个小问题,总结一下:

1.因为业务需要调用PHP的接口,获取到的返回体需要做一段逻辑处理,然而某个字段接收到的参数是io.serializable类型,字段的类型不是预期的string类型,当时有点懵逼,因为是用Scala的match case做模式匹配,也没多想,幸亏同事提示一番,才想起String其实实现了serializable接口,所以尽管返回的是io.serializable类型,但是也可以用string来接收;

2.调用PHP接口,返回体用JsonObject接受,但是有些许字段是null,本能反应用Gson转换为对象,用Scala的Option去接收可能为null的字段,但是程序运行就会报一个with no args的错误;

解决方法:用case class接收PHP接口返回,对于可能为null的字段不用加Option修饰,先不用管这个case class ,而是在JsonObject对字段加上isJsonNull的判断,后面Build thrift返回体的时候,这些字段定义为Option类型的Build进去就好了;

其实现在一想,用case class对字段进行判断获取也是可以的,明天实验一番;

        val uesrName:Option[String] = response.get("data").getAsJsonObject.get("userName").isJsonNull match {
case true => None
case false => Some(response.get("data").getAsJsonObject.get("userName").getAsString)
}