2012-04-19 4 views
1

내 서버에는 복잡한 객체가 있지만 웹 클라이언트에서는 이러한 객체를 간단하게 표현하고자합니다. 나는 예를 들어 자신의 ID로 오브젝트를 대체하고 싶습니다 :Json : 실제 객체 대신 객체 ID 생성

@JsonAutoDetect 
public class Event{ 
    private Long id; 
private String name; 
    private User user; 

    @JsonProperty("event_id") 
public Long getId() { 
    return event_id; 
    } 
    public String getName() { 
    return name; 
    } 
    public String getUser() { 
    return user; 
    } 
    ....setters 
} 

JSON을 생성 할 때 내가 내부 이벤트 클래스 및 사용자 클래스는 사용자 ID와 사용자를 대체 할 어쨌든 거기받을 수 있습니까? 많은 복잡한 객체를 가지고 있기 때문에 객체 ID 만 반환하는 User 객체에 대한 어노테이션과 같은 멋진 방식을 찾고 있습니다.

물론 다른 방법이 필요합니다. ID를 가져 와서 객체로 변환합니다.

은 BTW : 나는 잭슨

어떤 아이디어를 사용하고 있습니다?

10 배 노암

당신은 ID에 대한 속성을 노출하고 같은 하위 개체 속성을 무시할 수

답변

0

:

class Event { 
    private User user; 

    public Long getUserId() { 
     return user.getId(); 
    } 

    public void setUserId(Long userId) { 
     this.user = retrieveUserById(userId); // or any other code   
    } 

    @JsonIgnore 
    public User getUser() { 
     return user; 
    } 

    public void setUser(User user) { 
     this.user = user; 
    } 
} 
0

여기 그것을 달성하는 방법 내 생각이다. user 속성에 @JsonRawValue(true) 주석을 사용할 수 있습니다. 이것은 잭슨이 user 객체를 이미 직렬화 된 것으로 처리하도록합니다. 그리고 User 클래스의 .toString() 메소드를 오버라이드하여 id를 문자열로 반환하도록합니다.

public class Event { 
    ... 
    @JsonRawValue(true) 
    private User user; 
    ... 
} 

그리고 당신의 User 클래스 :

public class User { 
    ... 
    private Integer id; 
    ... 
    @Override 
    public String toString() { 
     return id.toString(); 
    } 
    ... 
} 

이것은 예를 들어,이 발생할 것이다 Event 클래스 그래서

귀하의 json에 "user": 5을 입력하십시오 (큰 따옴표는 User 개체 세리 값 근처에 추가되지 않습니다).