scala调用fastjson JSON.toJSONString()序列化对象出错
2024-09-07 23:28:31
在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
最新文章
- win环境 yii2 框架 overtrue/wechat 包 由 sys_get_temp_dir 引发的 the directory ";c:\Windows"; is not writable
- mysql入门1
- C# 调用系统winmm.dll 播放音乐wav mp3
- 对于Discuz!NT不允许新用户注册的解决办法
- Linux下不同机器之间的文件拷贝
- ubuntu 12.04 server编译安装nginx
- MSF命令 收集
- 【USACO 2.3.1】最长前缀
- MongoDB安装,打开及增,删,改,查
- 关于vnc连接闪退问题的设置
- hdu 3631 Shortest Path
- Retrofit 2.0 超能实践(一),okHttp完美支持Https传输
- 一篇入门 — Gatling 性能测试手册
- html中的Session
- Vue 使用细节收集
- bzoj1018/luogu4246 堵塞的交通 (线段树)
- java(一)IntelliJ和eclipse环境下的Hello World
- JS遮罩层弹框效果
- php基础知识测试总结
- 百度地图API 根据地址查询经纬度
热门文章
- mongodb下载和安装
- 安装MinGW-C++开发环境2--软件安装
- 【ubuntu20】设置静态IP
- PyTorch Geometric(pyg)学习
- echarts 之 source and clone函数问题hasOwnProperty is not defined
- vue 中的 .sync 修饰符 与 this.$emit('update:key', value)
- VsCode——修改左侧目录缩进
- 230222 Radiated Immunity Pre-compliance Test
- EBS的配置文件
- windows下的故障自愈程序,可以实现进程,kafka按时间段判断状态,日志分级