在scala中需要将case class 序列化为string,代码如下

results.map(JSON.toJSONString(_)).foreach(println)

case class pay(id:String)

然后出现下面的错误

Error:(35, 12) ambiguous reference to overloaded definition,
both method toJSONString in object JSON of type (x$1: Any, x$2: com.alibaba.fastjson.serializer.SerializerFeature*)String
and method toJSONString in object JSON of type (x$1: Any)String
match argument types (PayTest.this.pay)
JSON.toJSONString(t)

查看FastJson toJSONString发现有个可变参数相同的方法,结合错误应该是scala不知道调用哪个方法导致的

    public static final String toJSONString(Object object) {
return toJSONString(object, new SerializerFeature[0]);
} public static final String toJSONString(Object object, SerializerFeature... features) {
SerializeWriter out = new SerializeWriter(); try {
JSONSerializer serializer = new JSONSerializer(out);
for (com.alibaba.fastjson.serializer.SerializerFeature feature : features) {
serializer.config(feature, true);
} serializer.write(object); return out.toString();
} finally {
out.close();
}
}

我们直接在代码指定调用可变参数的方法,SerializerFeature是个枚举,我们直接选择第一个

results.map(JSON.toJSONString(_, SerializerFeature.QuoteFieldNames)).foreach(println)

但是出现的结果不是想要的,class的字段都没有序列化出来

{}

其实fastjson 默认是基于方法clz.getMethods()进行字段查找过滤的,而scala中的getter和setter方法完全不是java那种命名方式。scala中的getter:def foo():T setter: def foo_(val:T):Unit因此如果采用默认配置序列化scala对象,会出现如上问题。但是我们可以加上BeanProperty,目的是让这个类有getter和setter方法

case class pay(@BeanProperty id:String)

最后结果为

{"id":"1"}

另外我们还有一种基于Jackson的方式

  def objectParse = new RichMapFunction[pay, String] {
private var mapper: ObjectMapper = _ override def open(parameters: Configuration): Unit = {
this.mapper = new ObjectMapper()
} override def map(value: pay): String = {
mapper.writeValueAsString(value)
}
} results.map(objectParse).foreach(println)

参考:https://github.com/alibaba/fastjson/issues/1282

最新文章

  1. win环境 yii2 框架 overtrue/wechat 包 由 sys_get_temp_dir 引发的 the directory "c:\Windows" is not writable
  2. mysql入门1
  3. C# 调用系统winmm.dll 播放音乐wav mp3
  4. 对于Discuz!NT不允许新用户注册的解决办法
  5. Linux下不同机器之间的文件拷贝
  6. ubuntu 12.04 server编译安装nginx
  7. MSF命令 收集
  8. 【USACO 2.3.1】最长前缀
  9. MongoDB安装,打开及增,删,改,查
  10. 关于vnc连接闪退问题的设置
  11. hdu 3631 Shortest Path
  12. Retrofit 2.0 超能实践(一),okHttp完美支持Https传输
  13. 一篇入门 — Gatling 性能测试手册
  14. html中的Session
  15. Vue 使用细节收集
  16. bzoj1018/luogu4246 堵塞的交通 (线段树)
  17. java(一)IntelliJ和eclipse环境下的Hello World
  18. JS遮罩层弹框效果
  19. php基础知识测试总结
  20. 百度地图API 根据地址查询经纬度

热门文章

  1. mongodb下载和安装
  2. 安装MinGW-C++开发环境2--软件安装
  3. 【ubuntu20】设置静态IP
  4. PyTorch Geometric(pyg)学习
  5. echarts 之 source and clone函数问题hasOwnProperty is not defined
  6. vue 中的 .sync 修饰符 与 this.$emit('update:key', value)
  7. VsCode——修改左侧目录缩进
  8. 230222 Radiated Immunity Pre-compliance Test
  9. EBS的配置文件
  10. windows下的故障自愈程序,可以实现进程,kafka按时间段判断状态,日志分级