我正在调用一个返回 JSON 的端点,看起来像这样(在 Postman 中):
{
"Result": {
"attribute1": { ... },
"attribute2": { ... }
}
}
该请求返回的Content-Type标头是text/x-json
(与通常的application/json
)。我认为这在尝试通过杰克逊反序列化时会引起一些问题。该 JSON 的 POJO 看起来像这样:
@Getter
@Setter
public class Response {
@JsonProperty("Result")
private Result result;
}
The Result
类来自外部库(编写此端点的人是同一个人)。无论哪种方式,当我尝试通过调用此端点时RestTemplate.exchange()
,Jackson 无法将此 JSON 反序列化为有效的Result
班级。我正在这样做:
ResponseEntity<Response> response = restTemplate.exchange(url, HttpMethod.GET, null, Response.class);
Doing response.getBody()
给出一个Response
包含 null 的对象Result
目的。显然,Jackson 没有正确反序列化 JSON。我怀疑这是因为不寻常text/x-json
API 返回的 Content-Type。
我也有我的MappingJackson2HttpMessageConverter
配置为能够解析的对象text/x-json
内容类型,但运气不佳:
MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter();
jsonConverter.setSupportedMediaTypes(ImmutableList.of(new MediaType("text", "x-json")));
restTemplate.getMessageConverters().add(jsonConverter);
有什么指点吗?
更新:我不知道为什么这不起作用,但我找到了另一种方法 - 获取 JSON 作为Map
而不是域对象,这对于我的目的来说已经足够了。