我有一个非常简单的rest客户,我想将服务响应解析为一个自定义的ResponseBody类:

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


实际的问题是,假设我正在使用的服务的输出为JSON之类,则在setter,getter和构造方法方面,CustomResponseBody类应如何显示:

{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;
}


我使用了龙目岛注释@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实现序列化,预启用的HttpMessageConverters应该能够基于您的Header中的Content-Type转换任何可序列化的POJO。

关于java - Spring RestTemplate-ResponseBody类是什么样的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39934984/

10-09 15:45