2014-07-12 2 views
0

개체 배열 목록이 있습니다. ArrayList. Employee 클래스는 @XMLRootElement (name = "employees")로 주석 처리됩니다. 내가 저지 1.8.1를 사용 잭슨이 POJOMappingFeature.The 응답과 1.9.2 내가 잭슨은 JSON 응답에서 올바른 루트 이름 (직원)을 표시하게 할 방법저지 잭슨 루트 이름이 ArrayList로오고 있습니다

{ 
    ArrayList: [{name: John, age: 28}, {name: Mike, age:29}] 
} 

같다. 나는 Employee 클래스에서도 @JsonName (value = "employees")을 사용해 보았습니다. List라는 속성을 가진 EmployeeListWrapper와 같은 목록 래퍼를 사용하지 않고이 작업을 수행해야합니다.

{ 
    employees: [{name: John, age: 28}, {name: Mike, age:29}] 
} 

같은 잭슨 객체 매퍼 구성을 사용하여이 작업을 수행 할 수 있습니까? 어떤 도움을 주시면 감사하겠습니다.

+0

대답 도움을 당신이 당신의 문제를 해결 했습니까? – pgiecek

+0

나는 그것을 두려워하지 않았다. Im 저지에서 사용자 지정 개체 매퍼 확인자를 사용합니다. 거기에 ObjectMapper를 반환해야합니다. – Avinash

+0

그러나 그러한 ObjectMapper (리졸버가 제공)는 Jersey 리소스 클래스에 주입되어 직접 사용될 수 있습니다. – pgiecek

답변

1

주석은 ArrayList 클래스 자체에 입력해야하므로 @XMLRootElement 또는 @JsonRootName 개의 주석으로는이를 달성하지 못할 수도 있습니다. 그리고 콜렉션 래퍼없이이 작업을 수행해야하기 때문에 Jackson ObjectMapper을 직접 사용해야합니다. 맵퍼는 ObjectWriter 빌더에 대한 액세스를 제공

, 같은 JSON보기 및 사용하는 루트 형식으로 직렬화 매개 변수의 당 직렬화 구성에 사용 할 수 있습니다

빌더 객체입니다.

그리고 작가는 당신이 필요로하는 방법이 withRootName()입니다.

"루트 요소 줄 바꿈"에 사용할 루트 이름을 지정하는 구성으로 새 인스턴스를 생성하는 방법입니다.

아래 코드 스 니펫을 참조하십시오. 기본적 잭슨

ObjectWriter writer = ObjectMapper.writer().withRootName("employees"); 
writer.writeValueAsString(employees); 
0

JAXB annotations 인식하지 못할 수 있지만, 당신은이 작업을 수행 할 the object mapper을 사용자 정의 할 수 있습니다.

Jackson 주석을 고수하려면 @JsonRootName을 사용하여 루트 수준의 랩핑에 사용할 이름을 나타낼 수 있습니다.

0

또 다른 옵션은 findRootName() 메소드를 JaxbAnnotationIntrospector에 겹쳐 쓰고 ObjectMapper 내부에서 사용하는 것입니다.

그래서 코드는 다음과 같이 표시됩니다

@Override 
public String findRootName(AnnotatedClass ac) { 
    // will return "employees" for @XmlType(name = "employees") 
    // Or you can return the class name itself 
    return ac.getAnnotations().get(XmlType.class).name(); 
} 

참조 : Customizing root name in Jackson JSON provider