在版本2.8.6中忽略了Jackson @JsonPropertyOrder

时间:2017-08-07 20:54:20

标签: serialization properties jackson

在杰克逊2.8.6中@JsonPropertyOrder(alphabetic = true)

都没有

@JsonPropertyOrder(value = {"status", "extraCost", "liability", "advice", "clause"})

..对我的Java对象的序列化方式有任何影响。

@com.fasterxml.jackson.annotation.JsonPropertyOrder(alphabetic = true)
class MyPremium {
  private String status;
  private BigDecimal extraCost = BigDecimal.ZERO;
  private Premium liability = new Premium();    
  private String advice;
  private List<String> clause;

  // getters and setters omitted
}

每次重启应用程序时,序列化输出中属性的顺序都会发生变化。

知道可能是什么问题吗?文档相当模糊。它表明它不适用于JSON,但我再次看到许多examples这个注释成功地命令JSON属性。

  

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

     

注意:允许注释属性,主要从2.4开始   支持Map条目的字母顺序。

     

http://static.javadoc.io/com.fasterxml.jackson.core/jackson-annotations/2.8.6/com/fasterxml/jackson/annotation/JsonPropertyOrder.html

1 个答案:

答案 0 :(得分:0)

文档提及反序列化与此无关 - 您正在序列化属性。并且注释肯定适用于Jackson 2.x.

但是,您没有包含用于序列化的代码,因此显示它(或解释在不直接使用时使用它的框架)可能会有所帮助。

除此之外,是的,使用所示的注释应该在编写JSON(或其他支持的格式)时改变顺序。一种可能性是你使用的实际ObjectMapper来自Jackson 1.x(具有不同的注释)。 或者,如果你不控制序列化,那么框架甚至不能使用Jackson(某些Web框架默认使用其他json库)。