То же поле JSON установлено для другого атрибута в Java Pojo - PullRequest
0 голосов
/ 11 февраля 2019

Я хочу установить для одного поля json два атрибута в java pojo.Когда я использую jsonproperty для атрибута dublicate в pojo, одно поле всегда будет нулевым.

Мой объект 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();
}

Когда я запускаюкод я получаю следующий ответ;

OriginalReceiverAccountNo: 566665 ReceiverAccountNo: null

Я использую зависимость jackson-annotation-2.9.0. Как я могу решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Вы можете использовать конструктор, как этот, который устанавливает два свойства, заданные одним @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;
    }

Я предпочитаю этот метод для создания неизменяемых объектов, но вы можете оставить его изменяемым, если вам нравится

0 голосов
/ 11 февраля 2019

Это невозможно.Одно поле json отображается точно на одно свойство pojo.

Однако вы можете изменить поведение вашего pojo, чтобы установщик любого из них также устанавливал значение другого:

@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 будут иметь одинаковое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...