Java - @JsonProperty JSON 序列化/反序列化字段统一解决方案

2023-12-13 03:43:13

问题描述

最近遇到一个 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;
}
  • 我们可以写一个『反转』字段的类,将原来的驼峰和下划线互换下,这样序列化的时候就是带下划线的字段咯~

文章来源:https://blog.csdn.net/Dream_Weave/article/details/134800268
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。