以下划线(" _id")开头的属性的JSON反序列化不起作用

时间:2017-11-13 08:22:00

标签: java json spring

发布问题,因为我无法找到针对以下问题的解决方案。

第三部分REST服务之一我们正在消费类似于回复的响应 { "_id": "d55eb7c0", "applicationType": "TEST", "applicationId": "uxhJ1hcT1F8bpL3xAWvTjsymNcd1RArv", "description": "Some Description"}

尝试映射" _id"属性为,遵循正确的java bean命名

@JsonProperty("_id")
private String id;

会导致以下错误。

org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [class ] and content type [application/json;charset=utf-8]
at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:109)
at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:917)
at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:901)

如果字段名称是private String _id;,则json响应被反序列化而没有任何问题。但是我不希望从' _'开始命名字段。在我们的应用程序 我们正在使用Jackson-2.7.3& Spring RestTemplate进行REST调用。

使用端点的实现。它是一个使用Spring RestTemplate的简单GET调用。

HttpEntity<String> requestEntity = new HttpEntity<>(httpHeaders); return restTemplate.exchange(authorizationProperties.getEndpoint() + "/roles", HttpMethod.GET, requestEntity,new ParameterizedTypeReference<Auth0Roles>() {});

提前致谢。

2 个答案:

答案 0 :(得分:0)

我想你需要在访问器方法上应用注释,而不是字段本身:

   private String id;

   @JsonProperty("_id")
   public String getId() {
      return this.id;
   }
   public void setId(String i) {
      this.id = i;
   }

答案 1 :(得分:0)

它看起来不像JSON的问题。很可能你错过了HttpMessageConverter。

尝试添加此依赖关系

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.8.3</version>
</dependency>