Jersey-
json具有JAXB实现。收到该异常的原因是因为您没有注册Provider,更具体地说是未注册MessageBodyWriter。您需要在提供商中注册适当的上下文:
@Providerpublic class JAXBContextResolver implements ContextResolver<JAXBContext> { private final static String ENTITY_PACKAGE = "package.goes.here"; private final static JAXBContext context; static { try { context = new JAXBContextAdapter(new JSonJAXBContext(JSONConfiguration.mapped().rootUnwrapping(false).build(), ENTITY_PACKAGE)); } catch (final JAXBException ex) { throw new IllegalStateException("Could not resolve JAXBContext.", ex); } } public JAXBContext getContext(final Class<?> type) { try { if (type.getPackage().getName().contains(ENTITY_PACKAGE)) { return context; } } catch (final Exception ex) { // trap, just return null } return null; } public static final class JAXBContextAdapter extends JAXBContext { private final JAXBContext context; public JAXBContextAdapter(final JAXBContext context) { this.context = context; } @Override public Marshaller createMarshaller() { Marshaller marshaller = null; try { marshaller = context.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); } catch (final PropertyException pe) { return marshaller; } catch (final JAXBException jbe) { return null; } return marshaller; } @Override public Unmarshaller createUnmarshaller() throws JAXBException { final Unmarshaller unmarshaller = context.createUnmarshaller(); unmarshaller.setEventHandler(new DefaultValidationEventHandler()); return unmarshaller; } @Override public Validator createvalidator() throws JAXBException { return context.createvalidator(); } }}这将
@XmlRegistry在提供的程序包名称中查找,这是一个包含带
@XmlRootElement注释的POJO 的程序包。
@XmlRootElementpublic class Person { private String firstName; //getters and setters, etc.}然后在同一包中创建一个ObjectFactory:
@XmlRegistrypublic class ObjectFactory { public Person createNewPerson() { return new Person(); }}通过
@Provider注册,Jersey应该在您的资源中为您编组提供便利:
@GET@Consumes(MediaType.APPLICATION_JSON)public Response doWork(Person person) { // do work return Response.ok().build();}


