我正在使用 Jersey 2.1 API 返回 JAXB 注释对象的列表。
我有一个班级的人
@XmlRootElement(name = "person")
public class Person { ...
在 Jersey API 中,当我返回人员列表并将输出设置为 xml 时,它会在我的列表周围创建一个名为
<People>
<Person>
.. fields
</Person>
</People>
当我将输出设置为 JSON 格式时,它不会添加这个额外的 People 包装器,我希望它这样做。 我正在使用EclipseLink Moxy作为JSON提供程序。 有没有办法让 JSON 输出看起来与 XML 相同?
我遇到了一个名为 FEATURE_XMLROOTELEMENT_PROCESSING 的 Jersey 1.X API 字段,它应该启用此功能,但我不知道如何在 2.x 中设置它。 它正在为 XML 输出执行此操作的事实似乎表明它已经设置好了。 我只需要让 JSON 相同!
任何帮助将不胜感激,谢谢!
您可以执行以下操作:
爪哇模型
您可以在对象模型中引入一个名为 People
的新类。
人
import java.util.List;
import javax.xml.bind.annotation.*;
@XmlRootElement(name="People")
@XmlAccessorType(XmlAccessType.FIELD)
public class People {
@XmlElementRef
private List<Person> person;
}
人
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="Person")
public class Person {
}
休息服务
而不是:
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Person> read() {
你会做:
@GET
@Produces(MediaType.APPLICATION_JSON)
public People read() {
默认情况下,MOXy 不会包含根元素。 使用 Jersey 时,您可以利用 MoxyJsonConfig
对象(请参阅:http://blog.bdoughan.com/2013/06/moxy-is-new-default-json-binding.html)。
import javax.ws.rs.ext.*;
import org.eclipse.persistence.jaxb.JAXBContextProperties;
import org.glassfish.jersey.moxy.json.MoxyJsonConfig;
@Provider
public class MOXyJsonContextResolver implements ContextResolver<MoxyJsonConfig> {
private final MoxyJsonConfig config;
public MOXyJsonContextResolver() {
config = new MoxyJsonConfig()
.setIncludeRoot(true);
}
@Override
public MoxyJsonConfig getContext(Class<?> objectType) {
return config;
}
}
您还可以利用 MOXy 的 MOXyJsonProvider
类来执行相同的配置:
- http://blog.bdoughan.com/2012/05/moxy-as-your-jax-rs-json-provider.html