我有一个非常简单的休息客户端,我想将服务响应解析为自定义的ResponseBody类:
ResponseEntity<CustomResponseBody> entity = restTemplate.postForEntity(uri, request, CustomResponseBody.class);
实际的问题是CustomResponseBody类应该是什么样子,就setter,getters和constructors来说,假设我正在使用的服务的输出是一个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"
}
}
}
答案 0 :(得分:0)
应该是简单的POJO实现Serializable,预启用的HttpMessageConverters应该能够根据你的标题中的Content-Type转换任何Serializable POJO。
答案 1 :(得分:0)
如果json是{&#34; item1&#34;:value1,&#34; item2&#34;:value2}而你只想要这两个值,那么你的映射pojo应该有两个字段,&#34 ; ITEM1&#34;和&#34; item2&#34;与value1和value2的类型相同。默认的setter和getter应该没问题。