Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java pojo中,相同的json字段设置为不同的属性_Java_Spring_Rest_Jackson - Fatal编程技术网

在java pojo中,相同的json字段设置为不同的属性

在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

我想在JavaPOJO中将一个json字段设置为两个属性。当我在pojo中为dublicate属性使用jsonproperty时,每次都有一个字段为null

我的pojo对象是

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。