Jaxb Jersey Jackson根名将成为ArrayList
我有一个对象数组列表。ArrayList。Employee类用@XMLRootElement(name=“employees”)注释。我使用jersey 1.8.1、Jackson 1.9.2和POJOMappingFeatureJaxb Jersey Jackson根名将成为ArrayList,jaxb,jersey,jackson,Jaxb,Jersey,Jackson,我有一个对象数组列表。ArrayList。Employee类用@XMLRootElement(name=“employees”)注释。我使用jersey 1.8.1、Jackson 1.9.2和POJOMappingFeature { ArrayList: [{name: John, age: 28}, {name: Mike, age:29}] } 如何使jackson在json响应中显示正确的根名称(员工)。我还尝试在Employee类上使用@JsonName(value=“emp
{
ArrayList: [{name: John, age: 28}, {name: Mike, age:29}]
}
如何使jackson在json响应中显示正确的根名称(员工)。我还尝试在Employee类上使用@JsonName(value=“employees”)。我需要在不使用像EmployeeListWrapper这样的带有属性list的列表包装器的情况下执行此操作。我希望得到这样的回应
{
employees: [{name: John, age: 28}, {name: Mike, age:29}]
}
是否可以使用任何jackson对象映射器配置来执行此操作。非常感谢您的帮助。您可能无法通过
@XMLRootElement
或@JsonRootName
注释实现这一点,因为注释必须放在ArrayList
类本身上。由于您需要在不使用任何集合包装器的情况下执行此操作,因此必须直接使用JacksonObjectMapper
映射器提供对ObjectWriter
builder的访问
生成器对象,可用于序列化参数的每个序列化配置,如要使用的JSON视图和根类型
编写器有withRootName()
方法,这正是您所需要的
方法,用于构造具有指定“根元素包装”使用的根名称的配置的新实例
请参阅下面的代码片段
ObjectWriter writer = ObjectMapper.writer().withRootName("employees");
writer.writeValueAsString(employees);
默认情况下,Jackson可能无法识别,但您可以自定义以执行此操作
如果要坚持使用Jackson注释,可以使用来指示要用于根级别包装的名称 另一个选项是重写中的方法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();
}
参考资料:这个答案帮助你解决问题了吗?恐怕没有。我在泽西岛使用自定义对象映射器解析器。在这里,我必须返回ObjectMapper。但是这样的ObjectMapper(由您的解析器提供)可以注入到Jersey资源类中并直接使用。使用Jackson 2.x,JAX-RS资源方法可以使用@JsonRootName注释: