JSON - 让Jackson在序列化时使用JsonProperty

时间:2016-06-16 16:46:08

标签: java json spring rest

是否可以以简单的方式配置,以便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:" 令牌":" 2YotnFZFEjr1zCsicMWpAA"," expiresIn&#34 ;:3600," refreshToken":"是"" 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;
  }
  ...
}

1 个答案:

答案 0 :(得分:1)

您可以在getToken方法上设置属性名称,spring将使用它:

  protected String token;

  ...
  @JsonProperty("access_token")
  public String getToken()
  {
    return token;
  }