Jax-RS MessageBodyReader

我正在学习MessageBodyReader方法如何从提供者工作。 我看到该方法返回一个对象,我不知道如何从服务访问该对象。 我可以获得如何从读者类返回对象的解释吗? 这将有助于我为所有dto应用阅读规则。 提前致谢!

服务:

@POST @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) @Path("/CreateAccount") @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) public Response createAccount(@Context HttpServletRequest req) { String a = "Reader success? ";//Would to see that string here! return Response.ok().build(); } 

提供者:

 @Provider public class readerClass implements MessageBodyReader { @Override public boolean isReadable(Class paramClass, Type paramType, Annotation[] paramArrayOfAnnotation, MediaType paramMediaType) { // TODO Auto-generated method stub return true; } @Override public Object readFrom(Class paramClass, Type paramType, Annotation[] paramArrayOfAnnotation, MediaType paramMediaType, MultivaluedMap paramMultivaluedMap, InputStream paramInputStream) throws IOException, WebApplicationException { // TODO Auto-generated method stub return "Successfully read from a providers reader method"; } } 

您误解了MessageBodyReader的用途,它用于以下目的:

支持将流转换为Java类型的提供程序的合同。 要添加MessageBodyReader实现,请使用@Provider注释实现类。 MessageBodyReader实现可以使用Consumes注释,以限制它被认为适合的媒体类型

示例:如果您有一个用例来自xml / json以外的自定义格式,您想提供自己的UnMarshaller,您可以使用messagebody reader

  @Provider @Consumes("customformat") public class CustomUnmarshaller implements MessageBodyReader { @Override public boolean isReadable(Class aClass, Type type, Annotation[] annotations, MediaType mediaType) { return true; } @Override public Object readFrom(Class aClass, Type type, Annotation[] annotations, MediaType mediaType, MultivaluedMap multivaluedMap, InputStream inputStream) throws IOException, WebApplicationException { Object result = null; try { result = unmarshall(inputStream, aClass); // un marshall custom format to java object here } catch (Exception e) { e.printStackTrace(); } return result; } } 

在webservice中你可以使用它像..

  @POST @Path("/CreateAccount") @Consumes("custom format") public Response createAccount(@Context HttpServletRequest req,Account acc) { saveAccount(acc); // here acc object is returned from your custom unmarshaller return Response.ok().build(); } 

更多信息 : 自定义编组/ UnMarshalling示例 , Jersy实体提供程序教程