首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JAX-RS MessageBodyReader

JAX-RS MessageBodyReader
EN

Stack Overflow用户
提问于 2014-06-11 10:41:51
回答 1查看 18.2K关注 0票数 4

我正在从提供者那里学习MessageBodyReader方法是如何工作的。我看到该方法返回一个对象,但我不确定如何从服务访问该对象。我能得到一个关于如何从reader类返回对象的解释吗?这将帮助我对所有DTO应用读取规则。提前感谢!

服务:

代码语言:javascript
运行
复制
    @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();
    }

提供商:

代码语言:javascript
运行
复制
@Provider
public class readerClass implements MessageBodyReader<Object>
{

@Override
public boolean isReadable(Class<?> paramClass, Type paramType,
        Annotation[] paramArrayOfAnnotation, MediaType paramMediaType) {
    // TODO Auto-generated method stub
    return true;
}

@Override
public Object readFrom(Class<Object> paramClass, Type paramType,
        Annotation[] paramArrayOfAnnotation, MediaType paramMediaType,
        MultivaluedMap<String, String> paramMultivaluedMap,
        InputStream paramInputStream) throws IOException,
        WebApplicationException {
    // TODO Auto-generated method stub
    
    return "Successfully read from a providers reader method";
}

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-12 01:25:21

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

支持将流转换为

类型的提供者的Java契约。要添加MessageBodyReader实现,请使用@Provider注释实现类。MessageBodyReader实现可以使用消耗进行注释,以限制它被认为适合的媒体类型

示例:如果您有这样一个用例,您需要获得xml/json以外的自定义格式,您希望提供您自己的UnMarshaller,您可以使用messagebody阅读器

代码语言:javascript
运行
复制
    @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中,您可以像这样使用..

代码语言:javascript
运行
复制
    @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();
    }

更多信息Custom Marshalling/UnMarshalling ExampleJersy Entity Providers Tutorial

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24153827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档