Джексон: десериализовать одно значение в два поля Java

#java #jackson #deserialization

#java #Джексон #десериализация

Вопрос:

Итак, у меня есть одно поле в моем JSON

 {
"Number": "2737212281"}
  

И я хочу десериализовать это поле в два поля Java

 @Column(name = "TRANSACTION_CURRENCY", length = 5)
@JsonProperty("TransactionCurrency")
@JsonAlias({"Number"})
private String TransactionCurrency;

@Column(name = "SD_DOCUMENT_REASON", length = 3, nullable = true)
@JsonProperty("SDDocumentReason")
@JsonProperty("Number")
private String SDDocumentReason;
  

чтобы иметь одинаковое значение в обоих полях, по какой-то причине библиотека просто принимает первое поле (TransactionCurrency)

Ответ №1:

Использование @JsonCreator может быть вариантом.

Например, для JSON это выглядит так: { "field" : "anything" }

 import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;

class Foo {
    private final String field0;
    private final String field1;

    @JsonCreator
    public Foo(@JsonProperty("field") String value) {
        this.field0 = value;
        this.field1 = value;
    }
}
  

Комментарии:

1. Это, безусловно, помогло бы, но в моем случае некоторым клиентам приходится использовать SDDocumentReason в качестве поля, другие используют число (для десериализации) Но ваш комментарий был очень полезен, поэтому я проверил его 🙂