【发布时间】:2016-10-18 07:30:16
【问题描述】:
是否可以通过简单的方式配置让 Jackson(用于 Spring Boot REST 服务)在序列化对象时使用 JsonProperty 属性?
有一个 Spring Boot REST 客户端与 Spring Boot REST 服务通信。 REST 服务正在使用字段名称生成 JSON,但 REST 客户端在收到 JSON 时会尝试使用 @JsonProperty 注释中指定的值对其进行解析。
我不知道是什么原因导致它在序列化/反序列化过程中采用不同的方法,以及可以做些什么来让它们用同一种语言说话。我希望这是一个可以在某处设置的简单配置。
客户端收到的 JSON
16:13:47.491 [main] INFO TokenServiceImpl - AccessToken 收到:"token":"2YotnFZFEjr1zCsicMWpAA","expiresIn":3600,"refreshToken":"YES","tokenType": “示例”}
抛出异常
Caused by: org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "token" (C lass org.jboss.resteasy.skeleton.key.representations.AccessTokenResponse), not marked as ignorable at [Source: java.io.ByteArrayInputStream@2e9820ae; line: 1, column: 11] (through reference chain: o rg.jboss.resteasy.skeleton.key.representations.AccessTokenResponse["token"])
at org.codehaus.jackson.map.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyExcep tion.java:53)
REST 服务器代码
import org.jboss.resteasy.skeleton.key.representations.AccessTokenResponse;
@RequestMapping(value = "/token", method = RequestMethod.POST)
public @ResponseBody AccessTokenResponse getToken(@RequestBody String requestBody)
{
System.out.println("Request Body received:\n" + requestBody);
AccessTokenResponse response = new AccessTokenResponse();
response.setToken("2YotnFZFEjr1zCsicMWpAA");
response.setTokenType("example");
response.setExpiresIn(3600L);
response.setRefreshToken("YES");
return response;
}
类被序列化
package org.jboss.resteasy.skeleton.key.representations;
public class AccessTokenResponse
{
@JsonProperty("access_token")
protected String token;
...
public String getToken()
{
return token;
}
...
}
【问题讨论】: