杰克逊@JsonPropertyOrder被忽略了

时间:2015-10-17 11:17:45

标签: java json jackson

我目前正在使用Spark框架开发RESTful应用程序,我使用Jackson进行序列化。我遇到了这样的问题:@JsonPropertyOrder被忽略了。

这是我的POJO:

@Data
@JsonPropertyOrder({"id", "company", "title", "infos", "startDate", "endDate"})
public class Info {
    @JsonProperty("id")
    long id;

    @JsonProperty("company")
    Company company;

    @JsonProperty("title")
    String title;

    @JsonProperty("infos")
    List<Prize> infos;

    @JsonProperty("startDate")
    Date startDate;

    @JsonProperty("endDate")
    Date endDate;

    public Info() {}
}

我使用此方法生成JSON:

public static String generateJSONResponse(Object response) {
    if (responseObjectMapper == null) {
        responseObjectMapper = new ObjectMapper(new JsonFactory());
        responseObjectMapper.enable(SerializationFeature.INDENT_OUTPUT);
    }

    try {
        return responseObjectMapper.writeValueAsString(response);
    } catch (IOException ioe) {
        // Must not occur
    }

    // Something really unexpected happened, so we return unknown response;
    return ErrorMessages.ERROR_RESPONSE_UNKNOWN;
}

最后我收到了这个:

{
  "status": 0,
  "result": {
    "infoList": [
      {
        "infos": [...],
        "id": 2,
        "title": "...",
        "company": {...},
        "startDate": 1445238000000,
        "endDate": 1445792400000
      },
      ...
    ]
  }
}

我做错了什么?杰克逊还有什么不对劲?有人可以帮我吗?

另外,我尝试使用Jackson版本2.6.3和2.3.5。两者的工作方式相同。

3 个答案:

答案 0 :(得分:1)

Lomboks @Data干扰杰克逊反序列化。删除它并尝试..

答案 1 :(得分:0)

注释JavaDoc也回应了&#34;无序&#34;集合:http://fasterxml.github.io/jackson-annotations/javadoc/2.3.0/com/fasterxml/jackson/annotation/JsonPropertyOrder.html

  

此注释可能会或可能不会对反序列化产生影响:for   基本的JSON处理没有任何效果,但对于其他支持的数据   类型(或结构约定)可能有。

这可能解释了为什么它不起作用。

答案 2 :(得分:0)

检查您是否导入了正确的“JsonPropertyOrder”包:

这对我有用: import com.fasterxml.jackson.annotation.JsonPropertyOrder;