【问题标题】:Jersey Jackson root name coming as ArrayListJersey Jackson 根名称以 ArrayList 形式出现
【发布时间】:2014-07-12 07:43:15
【问题描述】:

我有一个对象数组列表。数组列表。 Employee 类使用@XMLRootElement(name = "employees") 进行注释。我使用球衣 1.8.1,杰克逊 1.9.2 和 POJOMappingFeature。响应就像

{
    ArrayList: [{name: John, age: 28}, {name: Mike, age:29}]
}

如何让杰克逊在 json 响应中显示正确的根名称(员工)。我也尝试在 Employee 类上使用 @JsonName(value = "employees") 。我需要在不使用具有属性 List 的 EmployeeListWrapper 之类的列表包装器的情况下执行此操作。我想得到这样的回应

{
    employees: [{name: John, age: 28}, {name: Mike, age:29}]
}

是否可以使用任何杰克逊对象映射器配置来做到这一点。任何帮助将不胜感激。

【问题讨论】:

  • 答案是否帮助您解决了问题?
  • 恐怕没有。我在球衣中使用自定义对象映射器解析器。我必须返回 ObjectMapper。
  • 但是这样一个 ObjectMapper(由你的解析器提供)可以注入到你的 Jersey 资源类中直接使用。
  • 在 Jackson 2.x 中,JAX-RS 资源方法可以使用 @JsonRootName 注释进行注释:github.com/FasterXML/jackson-jaxrs-providers

标签: jaxb jersey jackson


【解决方案1】:

您可能无法使用@XMLRootElement@JsonRootName 注释来实现这一点,因为注释必须放在ArrayList 类本身上。而且由于您需要在没有任何集合包装器的情况下执行此操作,因此您必须直接使用 Jackson ObjectMapper

映射器提供对ObjectWriter builder的访问,

可用于序列化参数的每个序列化配置的构建器对象,例如要使用的 JSON 视图和根类型。

作者有withRootName() 方法,这正是你所需要的。

使用指定用于“根元素包装”的根名称的配置构造新实例的方法。

参见下面的代码 sn-p。

ObjectWriter writer = ObjectMapper.writer().withRootName("employees");
writer.writeValueAsString(employees);

【讨论】:

    【解决方案2】:

    默认情况下,Jackson 可能无法识别 JAXB annotations,但您可以自定义 the object mapper 来执行此操作。

    如果您想坚持使用 Jackson 注释,可以使用 @JsonRootName 指示用于根级包装的名称。

    【讨论】:

      【解决方案3】:

      另一种选择是覆盖 JaxbAnnotationIntrospector 中的方法 findRootName() 并在 ObjectMapper 中使用它。

      所以代码看起来像:

      @Override
      public String findRootName(AnnotatedClass ac) {
          // will return "employees" for @XmlType(name = "employees")
          // Or you can return the class name itself
          return ac.getAnnotations().get(XmlType.class).name();
      }
      

      参考:Customizing root name in Jackson JSON provider

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-09-18
        • 2012-05-30
        • 2013-04-11
        • 1970-01-01
        • 2014-08-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多