[英]Jackson - Deserializing JSON to class
我正在調用一個端點,該端點返回看起來像這樣的JSON(在Postman中):
{
"Result": {
"attribute1": { ... },
"attribute2": { ... }
}
}
此請求返回的Content-Type標頭是text/x-json
(與通常的application/json
相反)。 我認為這在嘗試通過Jackson進行反序列化時會引起一些問題。 這個JSON的POJO看起來像這樣:
@Getter
@Setter
public class Response {
@JsonProperty("Result")
private Result result;
}
Result
類來自外部庫(編寫此終結點的人相同)。 無論哪種方式,當我嘗試通過RestTemplate.exchange()
調用此終結RestTemplate.exchange()
,Jackson都無法將此JSON反序列化為有效的Result
類。 我正在這樣做:
ResponseEntity<Response> response = restTemplate.exchange(url, HttpMethod.GET, null, Response.class);
進行response.getBody()
會給出一個Response
對象,其中包含一個空Result
對象。 顯然,Jackson沒有正確反序列化JSON。 我懷疑這是由於API返回的異常text/x-json
Content-Type。
我也將我的MappingJackson2HttpMessageConverter
對象配置為能夠解析text/x-json
Content-type,但是沒有運氣:
MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter();
jsonConverter.setSupportedMediaTypes(ImmutableList.of(new MediaType("text", "x-json")));
restTemplate.getMessageConverters().add(jsonConverter);
有指針嗎?
更新:我不知道為什么這不起作用,但是我想出了另一種方法-將JSON作為Map
而不是域對象來獲取,這足以滿足我的目的。
默認情況下, MappingJackson2HttpMessageConverter
綁定到:
我們需要添加text/x-json
。
MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter();
List<MediaType> jsonTypes = new ArrayList<>(jsonConverter.getSupportedMediaTypes());
jsonTypes.add(new MediaType("text", "x-json"));
jsonConverter.setSupportedMediaTypes(jsonTypes);
現在,我們應該在RestTemplate
使用它:
restTemplate.setMessageConverters(Collections.singletonList(jsonConverter));
ResponseEntity<RequestPayload> response = restTemplate.exchange(url, HttpMethod.GET, null, RequestPayload.class);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.