热点新闻
日常问题记录:fastjson转化dto大小写问题
2023-07-07 21:58  浏览:2018  搜索引擎搜索“手机易展网”
温馨提示:信息一旦丢失不一定找得到,请务必收藏信息以备急用!本站所有信息均是注册会员发布如遇到侵权请联系文章中的联系方式或客服删除!
联系我时,请说明是在手机易展网看到的信息,谢谢。
展会发布 展会网站大全 报名观展合作 软文发布

1、场景:传给第三方接口的参数<param1:string,param2:dto> ,其中dto首字母大写,string为dto的json格式
2、问题分析:获取param1的时候需要通过fastjson转化dto,默认会转化成小写的,需要格式是大写的

JSON.toJSonString(AccountDTO); 预期结果---------------------> {"Users":[{"Name":"1643157939815211008","PassWord":"9HBTbQn367UBW+dvSxyW1w=="},{"Name":"1643157939815211009","PassWord":"8g4uqHRpKAFptt4hM/dSbg=="}]} 实际结果---------------------> {"users":[{"name":"1643157939815211008","passWord":"9HBTbQn367UBW+dvSxyW1w=="},{"name":"1643157939815211009","passWord":"8g4uqHRpKAFptt4hM/dSbg=="}]

解决思路1
dto字段为小写,添加@JsonProperty("Name")

@Data @Builder @AllArgsConstructor @NoArgsConstructor public class AccountParamDTO implements Serializable { private static final long serialVersionUID = 1528608077503055270L; @JsonProperty("Name") private String name; @JsonProperty("PassWord") private String passWord;

这个接口可以将dto作为第三方接口入参的时候自动转换成大写的,但是fastjson转化还是小写的


解决思路2
添加@JSonField(name="Name")
单独使用可以解决fastjson转化成大写的问题,测试中发现和@JsonProperty("Name")一起使用,作为dubbo接口会报没有序列化的问题(实际已添加序列化)
还有一种山寨的方法就是定义两个dto,这个冲突的问题就解决了


解决思路3
直接将dto定义为大写的传输

@Data @Builder @AllArgsConstructor @NoArgsConstructor public class AccountParamDTO implements Serializable { private static final long serialVersionUID = 1528608077503055270L; private String Name; private String PassWord;

在需要转成json的类里添加下边的静态代码

static { TypeUtils.compatibleWithJavaBean = true; TypeUtils.compatibleWithFieldName = true; } @Override public void apply(AccountDTO accountDTO) { ..... JSON.toJSonString(accountDTO); }

转化结果正常,注意这种方法静态检查会有问题,java检测命名规范驼峰格式
最终采用的是方法2定义了两个dto

发布人:af1a****    IP:117.173.23.***     举报/删稿
展会推荐
让朕来说2句
评论
收藏
点赞
转发