使用FasterXML将对象转为指定大小写JSON对接REST转SOAP服务问题
解决JSON序列化键名大小写不匹配的问题
这问题我太熟了!你现在遇到的核心问题是:Java JSON序列化库默认会遵循JavaBean规范,把类名、字段名转成小驼峰格式,但你的目标REST服务要求首字母大写的键名(比如Group而不是group,InSSN而不是inSSN)。下面给你几个直接能用的解决办法:
方案1:用Jackson的@JsonProperty注解(最常用)
如果你的项目用的是Jackson作为JSON序列化工具,直接给类属性和字段加注解指定序列化后的名称就行:
修改Group类
public class Group { @JsonProperty("InSSN") // 指定序列化后的字段名为InSSN protected String InSSN = null; // 保留原有的getter和setter public String getInSSN() { return InSSN; } public void setInSSN(String inSSN) { InSSN = inSSN; } }
修改MappingSSNValidation类
假设这个类里有个Group类型的属性(比如叫group),给它加注解指定序列化后的键名为Group:
public class MappingSSNValidation { @JsonProperty("Group") // 指定序列化后的属性名为Group private Group group; // 保留原有的getter和setter public Group getGroup() { return group; } public void setGroup(Group group) { this.group = group; } }
这样序列化后就能得到你需要的格式:
{"mappingSSNValidation":{"Group":{"InSSN":"123456789"}}}
方案2:用Gson的@SerializedName注解
如果你的项目用的是Gson,就用它的专属注解来指定名称:
修改Group类
public class Group { @SerializedName("InSSN") protected String InSSN = null; // 原有的getter和setter不变 }
修改MappingSSNValidation类
public class MappingSSNValidation { @SerializedName("Group") private Group group; // 原有的getter和setter不变 }
为什么会出现这个问题?
Java的JSON序列化库(Jackson、Gson等)默认会把JavaBean的属性名转成小驼峰格式:比如类名Group会变成group,字段InSSN会变成inSSN。但你的目标服务要求严格匹配给定的大小写格式,所以必须手动指定每个需要特殊处理的键名。
内容的提问来源于stack exchange,提问作者JBeauch
相关产品推荐
相关产品推荐

