在java pojo中,相同的json字段设置为不同的属性
我想在JavaPOJO中将一个json字段设置为两个属性。当我在pojo中为dublicate属性使用jsonproperty时,每次都有一个字段为null 我的pojo对象是在java pojo中,相同的json字段设置为不同的属性,java,spring,rest,jackson,Java,Spring,Rest,Jackson,我想在JavaPOJO中将一个json字段设置为两个属性。当我在pojo中为dublicate属性使用jsonproperty时,每次都有一个字段为null 我的pojo对象是 public class PojoTest { private String receiverAccountNo; private String originalReceiverAccountNo; @JsonProperty("receiverAccountNo") public
public class PojoTest {
private String receiverAccountNo;
private String originalReceiverAccountNo;
@JsonProperty("receiverAccountNo")
public String getOriginalReceiverAccountNo() {
return originalReceiverAccountNo;
}
@JsonProperty("receiverAccountNo")
public void setOriginalReceiverAccountNo(String originalReceiverAccountNo) {
this.originalReceiverAccountNo = originalReceiverAccountNo;
}
public String getReceiverAccountNo() {
return receiverAccountNo;
}
public void setReceiverAccountNo(String receiverAccountNo) {
this.receiverAccountNo = receiverAccountNo;
}
}
我的要求是
{
"receiverAccountNo":"566665"
}
我的测试控制器是
@PostMapping("/test2")
public String test2(@RequestBody PojoTest pojoTest) {
return "OriginalReceiverAccountNo:"+pojoTest.getOriginalReceiverAccountNo()+" ReceiverAccountNo:"+pojoTest.getReceiverAccountNo();
}
当我运行代码时,我得到以下响应
原始收款人账号:566665收款人账号:空
我正在使用jackson-annotation-2.9.0依赖项。如何解决此问题?这是不可能的。一个json字段恰好映射到一个pojo属性 但是,您可以更改pojo的行为,以便其中一个的setter也设置另一个的值:
@JsonProperty("receiverAccountNo")
public void setOriginalReceiverAccountNo(String originalReceiverAccountNo) {
this.originalReceiverAccountNo = originalReceiverAccountNo;
this.receiverAccountNo = originalReceiverAccountNo;
}
public void setReceiverAccountNo(String receiverAccountNo) {
this.receiverAccountNo = receiverAccountNo;
this.originalReceiverAccountNo = receiverAccountNo;
}
这样,pojo中的两个字段将具有相同的值。您可以像这样使用构造函数映射,它设置两个属性,给定一个
@JsonProperty
public class Pojo
{
private final String receiverAccountNo;
private final String originalReceiverAccountNo;
@JsonCreator
public Observation(
@JsonProperty("receiverAccountNo") String value)
{
this.receiverAccountNo = value;
this.originalReceiverAccountNo = value;
}
我更喜欢这种方法来创建不可变的对象,但是如果您愿意,可以让它保持可变尝试将get和setter的JsonProperty注释到ReceiverAccountNo。我认为它是空的,因为您没有告诉注释为您填写该属性;2019年2月11日23:44:32.858警告[http-nio-8081-exec-1]org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.LogWarningIfRequired未能评估类型[[simple type,class com.ykb.frd.fraudws.PojoTest]的Jackson反序列化:com.fasterxml.jackson.databind.JsonMappingException:属性“receiverAccountNo”的setter定义冲突:com.ykb.frd.fraudws.PojoTest#setReceiverAccountNo(1个参数)vs com.ykb.frd.fraudws.PojoTest#setOriginalReceiverAccountNo(1个参数)请参见下面我的答案。我认为您不需要在setter函数上添加注释。我尝试了您的解决方案,但收到了相同的异常提示以供响应,但我不希望出现这种情况,因为当我使用您的解决方案时,如果我更改ReceiveRaccountno字段,则原始ReceiveRaccountno更新为ReceiveRaccountno。