Сопоставление строки JSON с POJO с различными атрибутами

#java #spring #jackson #objectmapper #fasterxml

Вопрос:

У меня есть строка JSON, которая выглядит так:

 String jsonString = "{"ID_BUY":1234567}";
 

И у меня есть POJO:

 @Data
@NoArgsConstructor
@SuperBuilder
@JsonInclude(Include,NON_EMPTY)
@JsonIgnoreProperties(ignoreUnknown = true)
public class Order() {
  @JsonProperty("ID_BUY")
  private String identityBuy;
}
 

Я использую ObjectMapper:

 ObjectMapper mapper = new ObjectMapper()
  .configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true)
  .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
  .configure(MapperFeature.USE_ANNOTATION, true);
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
mapper.setAnnotationIntrospector(new JaxbAnnotationIntrospector(TypeFactory.defaultInstance()));
 

Когда я выступаю

 Order output = mapper.readValue(jsonString, Order.class);
 

и распечатайте

 System.out.println(output.toString());
 

Я замечаю, что identityBuy имеет значение null.

Есть ли способ заставить картографа принять к сведению аннотацию @JsonProperty?

Может ли кто-нибудь указать мне правильное направление?

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

1. Я скопировал ваш код, и он сработал, ему нужно было удалить строку: mapper.setAnnotationIntrospector(new JaxbAnnotationIntrospector(TypeFactory.defaultInstance())); . Ты можешь попробовать?

Ответ №1:

Для меня это прекрасно работало.

Test.java

 import com.fasterxml.jackson.databind.ObjectMapper;
import com.test.check.Order;

public abstract class Test {

    public static void main(String[] args) throws Exception {

        ObjectMapper map = new ObjectMapper();

        String op = "{"ID_BUY":1234567}";
        Order orderObj = map.readValue(op, Order.class);

        System.out.println("printing output-->"   orderObj);
        System.out.println("printing output-->"   orderObj.toString());

    }

}
 

Order.java

 import com.fasterxml.jackson.annotation.JsonProperty;

import lombok.Data;
import lombok.Getter;
import lombok.Setter;

@Setter
@Getter
@Data
public class Order {

    @JsonProperty("ID_BUY")
    private String arun;

}
 

Выход:

 printing output-->Order(arun=1234567)
printing output-->Order(arun=1234567)