簡體   English   中英

Jackson-將JSON反序列化為類

[英]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綁定到:

  • 應用程序/ JSON
  • 應用/ * + JSON

我們需要添加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.

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