本文主要是介绍Java - @JsonProperty JSON 序列化/反序列化字段统一解决方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题描述
最近遇到一个 JSON 序列化问题,因为在场景中需要转发一样的 Body 数据,但是因为当时考虑到反序列化对象可读性问题,所以将字段下划线转驼峰
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.cfg.SerializerFactoryConfig;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;/*** @author Lux Sun* @date 2023/7/28*/
@Data
@Accessors(chain = true)
@Builder
@AllArgsConstructor
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class JtkOrderPushParam {@JsonProperty("order_sn")private String orderSn;@JsonProperty("pub_id")private Integer pubId;private Integer timestamp;
}
那么,问题也就来了,当再想将该对象序列化的时候,发现字段名就很自然的是驼峰字段,但是我们预期目标是下划线(因为另一段程序一样的代码逻辑)
解决方案
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.cfg.SerializerFactoryConfig;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;/*** @author Lux Sun* @date 2023/7/28*/
@Data
@Accessors(chain = true)
@Builder
@AllArgsConstructor
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class JtkOrderPushParamReverse {@JsonProperty("orderSn")private String order_sn;@JsonProperty("pubId")private Integer pub_id;private Integer timestamp;
}
- 我们可以写一个『反转』字段的类,将原来的驼峰和下划线互换下,这样序列化的时候就是带下划线的字段咯~
这篇关于Java - @JsonProperty JSON 序列化/反序列化字段统一解决方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!