Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jaxb Jersey Jackson根名将成为ArrayList_Jaxb_Jersey_Jackson - Fatal编程技术网

Jaxb Jersey Jackson根名将成为ArrayList

Jaxb 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。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=“employees”)。我需要在不使用像EmployeeListWrapper这样的带有属性list的列表包装器的情况下执行此操作。我希望得到这样的回应

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

是否可以使用任何jackson对象映射器配置来执行此操作。非常感谢您的帮助。

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

映射器提供对
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注释: