Note:我是EclipseLink JAXB (MOXy) http://www.eclipse.org/eclipselink/moxy.php领导者和成员JAXB (JSR-222) http://jcp.org/en/jsr/detail?id=222专家组。
我可以创建一个类,使用 JAXB 注释(用于 XML 支持)对其进行注释,并在 web.xml 中声明 JSON(杰克逊库)支持吗?
您始终可以使用Application
类来指定MessageBodyReader
/MessageBodyWriter
用于 JSON 绑定。我相信 Jackson 在其 jar 中提供了一个实现。下面是一个示例Application
将 MOXy 指定为 JSON 提供程序的类:
package org.example;
import java.util.*;
import javax.ws.rs.core.Application;
import org.eclipse.persistence.jaxb.rs.MOXyJsonProvider;
public class CustomerApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
HashSet<Class<?>> set = new HashSet<Class<?>>(2);
set.add(MOXyJsonProvider.class);
set.add(CustomerService.class);
return set;
}
}
或者我需要分别为 JSON 和 XML 创建两个类?
EclipseLink JAXB (MOXy) 提供本机 XML 绑定,旨在使您能够使用JSON 和 XML 具有相同的对象模型 http://blog.bdoughan.com/2011/08/binding-to-json-xml-geocode-example.html。您可以使用以下命令将其集成到您的 JAX-RS 应用程序中:MOXyJsonProvider
class:
- http://blog.bdoughan.com/2012/05/moxy-as-your-jax-rs-json-provider.html http://blog.bdoughan.com/2012/05/moxy-as-your-jax-rs-json-provider.html
如何以编程方式选择返回的类型(JSON 或 XML)?
服务器端
您可以使用以下命令指定您的服务同时提供 XML 和 JSON 消息@Produces
注解。
@GET
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Path("{id}")
public Customer read(@PathParam("id") long id) {
return entityManager.find(Customer.class, id);
}
了解更多信息