2011-12-23 5 views
2

XML로 출력 할 때 POJO 클래스를 직렬화하고 싶습니다. 원하는대로 완벽하게 작동합니다. 하지만 JSON은 아닙니다.jackson으로 일반 JSON을 직렬화

내 주요 POJO 클래스

@XmlRootElement(name="result") 
@XmlSeeAlso({ResultDataRowItemTest.class}) 
public class ResultDataRowTest { 
    private ResultDataRowItemTest response; 

    public ResultDataRowTest() {} 

    public ResultDataRowItemTest getResponse() {return response;} 

    public void setResponse(ResultDataRowItemTest pst) {this.response = pst;} 

} 

ResultDataRowItemTest 클래스 :

public class ResultDataRowItemTest<T> { 
    private T item; 

    public ResultDataRowItemTest() {} 

    @JsonTypeInfo(use=Id.NAME, include=As.WRAPPER_OBJECT) 
    @XmlElements({ 
    @XmlElement(name="user", type=RetUser.class) 
    }) 
    public T getItem() {return item;} 

    public void setItem(T pst) {this.item = pst;} 
} 

RetUser 클래스 :

<result> 
    <response> 
    <user> 
     <firstName>John</firstName> 
     <lastName>Pantau</lastName> 
     <userID>5</userID> 
     <userName>JohnP</userName> 
    </user> 
    </response> 
</result> 
,536 다음 XML에 대한

@JsonTypeName("user") 
@XmlRootElement(name="user") 
public class RetUser { 
    private int userID; 
    private String userName; 
    private String firstName; 
    private String lastName; 

    public String getUserName() {return userName;} 
    public void setUserName(String userName) {this.userName = userName;} 

    public int getUserID() {return userID;} 
    public void setUserID(int userID) {this.userID = userID;} 

    public String getFirstName() {return firstName;} 
    public void setFirstName(String firstName) {this.firstName = firstName;} 

    public String getLastName() {return lastName;} 
    public void setLastName(String lastName) {this.lastName = lastName;} 

} 

결과

다음은 JSON에 대한 결과입니다 :

{"response":{ 
    "item":{ 
    "user":{ 
     "userID":5, 
     "userName":"JohnP", 
     "firstName":"John", 
     "lastName":"Pantau" 
    } 
    } 
}} 

문제는 어떻게 JSON에 대해 "항목을"개체를 제거하는 것입니다? 결과는 XML과 같습니다.

그래서 많은 감사는 당신은 JSON에 대한 XML 잭슨에 대한 JAXB를 사용하고있다처럼

답변

1

이 보이는 전에.

http://wiki.fasterxml.com/JacksonInFiveMinutes#Data_Binding_with_Generics에서 일반 형식 정의를 전달해야 할 수도 있습니다.

ResultDataRowTest에서 Jackson 주석을 지정해야합니다.

+0

맞아, 봄을 이용해 휴식 서비스를 만듭니다. 그래서 반환/응답 POJO 클래스를 만들어야합니다. 지금까지는 XML과 함께 작동합니다. Jackson으로 JSON을 찾고 있습니다. 답장을 보내 주셔서 감사합니다. – iJusran

+0

jackson annotation을 지정하면 무슨 뜻인지 설명 할 수 있습니까? 귀하의 답변에 대해 – iJusran

1

우선, JSON과 XML이 비슷하게 보이는지 여부에 대해서는별로 신경 쓰지 않아도됩니다. 서로 다른 논리 모델 (객체 대 계층 구조)을 가진 서로 다른 형식이며 다른 도구와 함께 사용됩니다. 두 가지가 조금 다르기 때문에 형식 자체 (예 : 'XML 정리'및 'JSON 정리')에 이상적입니다.

'항목': 접근 자 (getItem())가있는 경우 표시됩니다. 당신이 그것을 원하지 않는다면, 당신은 당신의 구조를 평평하게 할 수 있습니다.

또한 일반 형식 매개 변수 T를 사용하는 이유를 알지 못합니다. 실제로 매개 변수를 사용하지 않으므로 말입니다. 유형으로 Object을 사용할 수도 있습니다. 이 경우에는 유용하지 않다고 말하면서 정말 상처 입으면 안됩니다.

+0

감사합니다. 나는 XML과 JSON에 대한 ** 다른 ** 응답/리턴을 만들 문서에 관심이있다. 위의 예제에서,'T' 객체는'RetUser.class' 만 수신하지만 실제 코드에서는 대부분의 pojo 클래스를받습니다. – iJusran

+0

안녕하세요 @ StaxMan, 나는'item' 개체에 대해 @JsonUnwraped를 사용 해봤지만 작동하지 않습니다. 아마 XML과 JSON 모두에 대한 응답이 항상 같지는 않다는 사실을 받아 들여야 할 것입니다. 생각 해줘서 고마워. – iJusran

관련 문제