2016-10-08 61 views
1

我有一個非常簡單的REST客戶端,我想解析服務響應到定製ResponseBody類:春天RestTemplate - 什麼是一個ResponseBody類看起來像

ResponseEntity<CustomResponseBody> entity = restTemplate.postForEntity(uri, request, CustomResponseBody.class); 

實際的問題是如何CustomResponseBody類應該是什麼樣子,在假定從我消費的服務輸出的制定者,干將條款和構造一個JSON,如:

{item1:something, item2:otherthing} 

而且我makeRestTemplate方法是:

@Bean 
    public RestTemplate makeRestTemplate() { 
    RestTemplate restTemplate = new RestTemplate(); 

    HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); 
    requestFactory.setConnectTimeout(TIMEOUT_MILLIS); 
    requestFactory.setReadTimeout(TIMEOUT_MILLIS); 
    restTemplate.setRequestFactory(requestFactory); 
    restTemplate.setErrorHandler(errorHandler); 

    List<HttpMessageConverter<?>> converters = restTemplate.getMessageConverters(); 
    for (HttpMessageConverter<?> converter : converters) { 
     if (converter instanceof MappingJackson2HttpMessageConverter) { 
      MappingJackson2HttpMessageConverter jsonConverter = (MappingJackson2HttpMessageConverter) converter; 
      ObjectMapper objectMapper = makeObjectMapper(); 
      jsonConverter.setObjectMapper(objectMapper); 
      jsonConverter.setSupportedMediaTypes(Arrays.asList(new MediaType("application", "json", MappingJackson2HttpMessageConverter.DEFAULT_CHARSET), 
        new MediaType("text", "javascript", MappingJackson2HttpMessageConverter.DEFAULT_CHARSET))); 
     } 
    } 

    return restTemplate; 
} 

我已經使用lombok的anotation @Data工作,但我想知道customResponseBody類的最低要求是什麼,以實際解析響應。

UPDATE:

一個簡單的POJO不工作,我有一些問題,努力實現自定義的setter和getter方法,它看起來像普通的getter和setter方法旁邊什麼使得綁定過程失敗。

接受

import lombok.Data; 
import lombok.NoArgsConstructor; 

@NoArgsConstructor 
@Data 
public class CustomResponseBody { 
    private String item1; 
    private String item2; 
} 

未被接受

import lombok.Setter; 
import lombok.Getter; 
import lombok.NoArgsConstructor; 

@NoArgsConstructor 
public class CustomResponseBody { 

    @Getter 
    @Setter 
    private String item1; 

    @Getter 
    private String item2; 

    public void setItem2(String item2) { 
     if ("something".equals(item2)) { 
      this.item2 = "whatever"; 
     } else { 
      this.item2 = "otherstuff" 
     } 
    } 
} 

回答

0

它應該是簡單的POJO實現Serializable,預先啓用HttpMessageConverters應該能夠轉換基於頁眉您的Content-Type的任何可序列化的POJO。

0

如果json是{「item1」:value1,「item2」:value2}並且你只是想要這兩個值,那麼你的映射pojo應該有兩個字段,「item1」和「item2」值1和值2。默認的setter和getters應該沒問題。

相關問題