簡體   English   中英

Spring RestTemplate - ResponseBody類的外觀如何

[英]Spring RestTemplate - What does a ResponseBody Class look like

我有一個非常簡單的休息客戶端,我想將服務響應解析為自定義的ResponseBody類:

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

實際問題是CustomResponseBody類應該是什么樣子,就setter,getters和構造函數而言,假設我正在使用的服務的輸出是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類實際解析響應的最低要求是什么。

更新:

一個簡單的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"
        }
    }
}

它應該是簡單的POJO實現Serializable,預啟用的HttpMessageConverters應該能夠根據你的標題中的Content-Type轉換任何Serializable POJO。

如果json是{“item1”:value1,“item2”:value2}而你只想要這兩個值,那么你的映射pojo應該有兩個字段,“item1”和“item2”,其類型與value1和value2相同。 默認的setter和getter應該沒問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM