Jackson JSON이 사용자 지정 루트 이름으로 요소 배열을 역 직렬화 할 수 없습니까?

에디 본

다음과 같은 Json이 있습니다.

{
  "testEntities" : [ {
    "id" : 1,
    "floatNumber" : 0.006117165,
    "floatNumberObject" : 0.15273619,
    "intNumber" : -1155869325,
    "intNumberObject" : 431529176,
    "doubleNumber" : 0.41008081149220166,
    "doubleNumberObject" : 0.20771484130971707,
    "shortNumber" : 9364,
    "shortNumberObject" : 13977,
    "booleanValue" : true,
    "booleanValueObject" : true,
    "byteValue" : -79,
    "charValue" : "e",
    "charValueObject" : "b",
    "creationDate" : 86400000
  }, {
    "id" : 2,
    "floatNumber" : 0.9874208,
    "floatNumberObject" : 0.45285606,
    "intNumber" : -1154715079,
    "intNumberObject" : 1260042744,
    "doubleNumber" : 0.9014476240300544,
    "doubleNumberObject" : 0.49682259343089075,
    "shortNumber" : 483,
    "shortNumberObject" : 18322,
    "booleanValue" : false,
    "booleanValueObject" : true,
    "byteValue" : -73,
    "charValue" : "c",
    "charValueObject" : "r",
    "creationDate" : 172800000
  } ]
}

역 직렬화를 시도하면 다음과 같이 실패합니다.

Caused by: com.fasterxml.jackson.databind.JsonMappingException: Root name 'testEntities' does not match expected ('TestObject[]') for type

이미 배열 역 직렬화를 활성화했습니다.

objectMapper.enable(DeserializationFeature.USE_JAVA_ARRAY_FOR_JSON_ARRAY);

분명히 testEntitiesJackson은 아무것도 모르는 사용자 지정 이름입니다. TestObject클래스에는 JsonRootNamePlural루트 요소가 단일 인스턴스가 아닌 컬렉션 일 때 사용되는 라는 사용자 지정 주석 이 있습니다.

@JsonRootName("testEntity")
@JsonRootNamePlural("testEntities")
public class TestObject {
   ...
}

이 주석은 시스템의 다른 위치에서도 필요합니다.

@JsonRootName배열을 제외하고 주석을 사용하는 것과 동일한 방식으로 사용하고 싶습니다 . 따라서 JsonRootName에 표시된대로 루트 요소를 찾을 수 있으며, 발견되지 않으면 @JsonRootNamePlural을 찾을 수 있습니다. JSON의 다른 모든 루트 이름은 Jackson에서 무시해야합니다.

문제는 이 동작을 도입하기 위해 무엇을 재정의하거나 사용자 정의해야합니까?

어떤 도움이나 조언이라도 대단히 감사합니다!

에디 본

내 질문에 대한 답을 찾았습니다. 객체 매퍼에 메서드 JacksonAnnotationIntrospector를 재정의 하는 사용자 지정 인스턴스를 설정 findRootName해야하며 클래스가 배열인지 확인하고 배열 구성 요소 클래스에서 사용자 지정 주석을 찾습니다.

    @Override
    public PropertyName findRootName(AnnotatedClass ac) {
        // if this is an array, look for JsonRootNamePlural annotation in
        // the base type for the array (the so called array component)
        if (ac.getRawType().isArray()) {
            Class<?> arrayComponent = ac.getRawType().getComponentType();

            JsonRootNamePlural ann = arrayComponent.getAnnotation(JsonRootNamePlural.class);
            if (ann != null) {
                return PropertyName.construct(ann.value(), null);
            }

        }

        // super class will look for default @JsonRootName annotation
        return super.findRootName(ac);
    }

이것이 다른 사람들을 도울 수 있기를 바랍니다.

건배!

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

XmlSerializer가 루트 요소에 지정된 스키마로 XML을 역 직렬화 할 수없는 이유

분류에서Dev

직렬화 후 저지로 json을 역 직렬화 할 수 없습니까?

분류에서Dev

XStream은 Java로 역 직렬화 할 때 필드 이름을 별칭으로 지정할 수 없습니다.

분류에서Dev

C #에서 사용자 지정 직렬화를 사용할 때 XML 요소의 이름을 어떻게 제어 할 수 있습니까?

분류에서Dev

요소를 사용할 수있을 때 개체 배열의 이진 데이터 역 직렬화

분류에서Dev

Jackson을 사용한 사용자 지정 JSON 직렬화 / 역 직렬화

분류에서Dev

jackson @JsonTypeInfo 주석을 사용하여 객체를 원래 유형으로 역 직렬화 할 수 없습니다.

분류에서Dev

RestSharp는 내 JSON 응답을 제대로 자동 역 직렬화 할 수 없지만 JSON.NET은 할 수 있습니다. 이유는 무엇입니까?

분류에서Dev

servicestack MsgPack 클라이언트를 사용할 때 서비스 응답을 역 직렬화 할 수 없습니다.

분류에서Dev

json 배열을 역 직렬화 할 수 없습니다.

분류에서Dev

키가 문자열 직렬화되고 값이 avro 인 Spark 구조화 된 스트림을 사용하여 avro 메시지를 역 직렬화 할 수 없습니다.

분류에서Dev

JSon을 C #으로 역 직렬화 할 수 없습니다.

분류에서Dev

루트없이 JSON 배열을 역 직렬화합니다. 배열 값을 어떻게 읽습니까?

분류에서Dev

자바 스크립트 배열이 역 직렬화 된 객체 배열에서 값을 추출 할 수 없습니다.

분류에서Dev

자바 스크립트 배열이 역 직렬화 된 객체 배열에서 값을 추출 할 수 없습니다.

분류에서Dev

이 json을 어떻게 역 직렬화 할 수 있습니까?

분류에서Dev

사용자 지정 SharePoint 2013 웹 파트가 포스트 백없이 소비자 및 공급자 역할을 모두 수행 할 수 있습니까?

분류에서Dev

SignalR이 사용자 지정 DataMember 이름을 직렬화 / 역 직렬화하지 않습니다.

분류에서Dev

이와 같은 배열을 어떻게 역 직렬화 할 수 있습니까?

분류에서Dev

Jackson의 사용자 지정 JSON 역 직렬화, invalide 배열 제외

분류에서Dev

C # 역 직렬화는 사용자 지정 코드를 통해 특성에 대한 바이트 배열로 문자열을 자동으로 역 직렬화합니까?

분류에서Dev

Circe의 수동 디코더를 사용하여 고정되지 않은 json 배열을 어떻게 역 직렬화 할 수 있습니까?

분류에서Dev

VB.net을 사용하여 Json이 Youtube 데이터를 역 직렬화 할 수 없습니다.

분류에서Dev

JSON에서 사전을 역 직렬화 할 수 없습니다.

분류에서Dev

JsonSubTypes없이 jackson을 사용하여 인터페이스를 특정 유형으로 역 직렬화

분류에서Dev

json을 제대로 역 직렬화 할 수 없습니다.

분류에서Dev

Jackson을 사용하여 JSON 배열을 매핑으로 역 직렬화

분류에서Dev

문자열로 역 직렬화 할 수 없습니다.

분류에서Dev

protobuf-net에서 주어진 유형을 직렬화 / 역 직렬화 할 때 사용할 사용자 정의 메소드를 지정하는 방법이 있습니까?

Related 관련 기사

  1. 1

    XmlSerializer가 루트 요소에 지정된 스키마로 XML을 역 직렬화 할 수없는 이유

  2. 2

    직렬화 후 저지로 json을 역 직렬화 할 수 없습니까?

  3. 3

    XStream은 Java로 역 직렬화 할 때 필드 이름을 별칭으로 지정할 수 없습니다.

  4. 4

    C #에서 사용자 지정 직렬화를 사용할 때 XML 요소의 이름을 어떻게 제어 할 수 있습니까?

  5. 5

    요소를 사용할 수있을 때 개체 배열의 이진 데이터 역 직렬화

  6. 6

    Jackson을 사용한 사용자 지정 JSON 직렬화 / 역 직렬화

  7. 7

    jackson @JsonTypeInfo 주석을 사용하여 객체를 원래 유형으로 역 직렬화 할 수 없습니다.

  8. 8

    RestSharp는 내 JSON 응답을 제대로 자동 역 직렬화 할 수 없지만 JSON.NET은 할 수 있습니다. 이유는 무엇입니까?

  9. 9

    servicestack MsgPack 클라이언트를 사용할 때 서비스 응답을 역 직렬화 할 수 없습니다.

  10. 10

    json 배열을 역 직렬화 할 수 없습니다.

  11. 11

    키가 문자열 직렬화되고 값이 avro 인 Spark 구조화 된 스트림을 사용하여 avro 메시지를 역 직렬화 할 수 없습니다.

  12. 12

    JSon을 C #으로 역 직렬화 할 수 없습니다.

  13. 13

    루트없이 JSON 배열을 역 직렬화합니다. 배열 값을 어떻게 읽습니까?

  14. 14

    자바 스크립트 배열이 역 직렬화 된 객체 배열에서 값을 추출 할 수 없습니다.

  15. 15

    자바 스크립트 배열이 역 직렬화 된 객체 배열에서 값을 추출 할 수 없습니다.

  16. 16

    이 json을 어떻게 역 직렬화 할 수 있습니까?

  17. 17

    사용자 지정 SharePoint 2013 웹 파트가 포스트 백없이 소비자 및 공급자 역할을 모두 수행 할 수 있습니까?

  18. 18

    SignalR이 사용자 지정 DataMember 이름을 직렬화 / 역 직렬화하지 않습니다.

  19. 19

    이와 같은 배열을 어떻게 역 직렬화 할 수 있습니까?

  20. 20

    Jackson의 사용자 지정 JSON 역 직렬화, invalide 배열 제외

  21. 21

    C # 역 직렬화는 사용자 지정 코드를 통해 특성에 대한 바이트 배열로 문자열을 자동으로 역 직렬화합니까?

  22. 22

    Circe의 수동 디코더를 사용하여 고정되지 않은 json 배열을 어떻게 역 직렬화 할 수 있습니까?

  23. 23

    VB.net을 사용하여 Json이 Youtube 데이터를 역 직렬화 할 수 없습니다.

  24. 24

    JSON에서 사전을 역 직렬화 할 수 없습니다.

  25. 25

    JsonSubTypes없이 jackson을 사용하여 인터페이스를 특정 유형으로 역 직렬화

  26. 26

    json을 제대로 역 직렬화 할 수 없습니다.

  27. 27

    Jackson을 사용하여 JSON 배열을 매핑으로 역 직렬화

  28. 28

    문자열로 역 직렬화 할 수 없습니다.

  29. 29

    protobuf-net에서 주어진 유형을 직렬화 / 역 직렬화 할 때 사용할 사용자 정의 메소드를 지정하는 방법이 있습니까?

뜨겁다태그

보관