2014-09-18 4 views
2

나는 스프링을 처음 접했고 예제를 따라 http://spring.io/guides/gs/consuming-rest에 올랐다. 예제를 조금 넓히기 위해 http://graph.facebook.com/pivotalsoftware의 모든 JSON 요소를 매핑하지 않은 것으로 나타났습니다. 이 예를 들어, 나는 Page.java 년과 같이, "좋아"와 "were_here_count"을 추가하고 싶었 :Spring RestTemplate 커스텀 매핑

import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 

@JsonIgnoreProperties(ignoreUnknown = true) 
public class Page { 

    private String name; 
    private String about; 
    private String phone; 
    private String website; 
    private int were_here_count; 
    private int likes; 

    public String getName() {return name;} 
    public String getAbout() {return about;} 
    public String getPhone() {return phone;} 
    public String getWebsite() {return website;} 
    public int getVisitCount() {return were_here_count;} 
    public int getLikes() {return likes;} 
} 

및 Application.java에서 이러한 변경하기 :

import org.springframework.web.client.RestTemplate; 

public class Application { 

    public static void main(String args[]) { 
     RestTemplate restTemplate = new RestTemplate();     
     Page page = restTemplate.getForObject("http://graph.facebook.com/pivotalsoftware", Page.class); 
     System.out.println("Name: " + page.getName()); 
     System.out.println("About: " + page.getAbout()); 
     System.out.println("Phone: " + page.getPhone()); 
     System.out.println("Website: " + page.getWebsite()); 
     System.out.println("Visit count: " + page.getVisitCount()); 
     System.out.println("Likes: " + page.getLikes()); 
    } 
} 

내가 생각되었다 매핑은 요소 이름에 의해 수행되었으며 "좋아요"에 대해서는 작동했지만 "were_here_count"에 대해서는 작동하지 않았습니다. 출력 :

Name: Pivotal 
About: Pivotal is enabling the creation of modern software applications that leverage big & fast data – on a single, cloud independent platform. 
Phone: (650) 286-8012 
Website: http://www.pivotal.io 
Visit count: 0 
Likes: 1175 

were_here_count는 현재 60입니다. 기본 변환기가 변수 이름의 밑줄을 좋아하지 않는다고 생각합니다. 그래서 내 자신의 매핑을 제공하는 getForObject의 오버로드 된 버전을 다음과 같이 사용했습니다.

하지만 모두 사용할 수 없습니다. 여기에 사용자 정의 JSON 변환기에 관한 몇 가지 예제를 보았지만 잘 이해하지 못했습니다. 더 간단한 예제이며, 변수 이름의 간단한 String-String 매핑으로이 작업을 수행 할 수 없습니까?

누구든지이 작업을 수행하는 방법을 알고 있으며 사용자 지정 변환기를 작성하는 방법과 필요한 단계는 무엇입니까? 고맙습니다! :)

답변

0

페이지 설정자는 어떻게 생겼습니까? 그것은이 세터와 나를 위해 작동 : 당신의 Page 클래스에 Jackson's annotations의 일부를 추가

public void setWere_here_count(int were_here_count) { 
    this.were_here_count = were_here_count; 
} 
3

시도는 JSON의 직렬화 복원에 도움이. 당신은 속성 :

public class Page { 
    ... 
    @JsonProperty("were_here_count") 
    private int wereHereCount; 
    ... 
} 

또 다른 옵션은, 당신이 확실하지 않은 경우 POJO에 응답 JSON 맵에 어떤 속성 (기본적으로 봄 JSON의 직렬화/역 직렬화를 처리합니다) 잭슨을 말할 수 있어야 속성이 반환되고 있는지, 단지 Map에 JSON을지도하는 것입니다

Map<String,Object> map = restTemplate.getForObject("http://graph.facebook.com/pivotalsoftware", Map.class); 
for (Map.Entry entry: response.entrySet()){ 
    // do stuff... 
} 

는 언젠가이 응답 JSON이 복잡하거나 그냥 쉽게 직렬화하지 않는 경우 사용자 정의 개체 매핑을 할 수있는 쉬운 방법입니다.

관련 문제