快速业务通道

使用JAX-RS简化REST应用开发 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
nt Negotiation)的机制:作为服务端,Resource 方法的 Produces 标注用于指定响应体的数据格式(MIME 类型),Consumes 标注用于指定请求体的数据格式;作为客户端,Accept 请求头用于选择响应体的数据格式,Content-Type 请求头用于标识请求体的数据格式。

JAX-RS 依赖于 MessageBodyReader 和 MessageBodyWriter 的实现来自动完成返回值到响应体的序列化以及请求体到实体参数的反序列化工作,其中,XML 格式的请求/响应数据与 Java 对象的自动绑定依赖于 JAXB 的实现。

用户可以使用 Provider 标注来注册使用自定义的 MessageBodyProvider,如 清单 6 所示,GsonProvider 类使用了 Google Gson 作为 JSON 格式的 MessageBodyProvider 的实现。

清单 6. GsonProvider

@Provider  @Produces("application/json") @Consumes("application/json") public class GsonProvider implements MessageBodyWriter<Object>,    MessageBodyReader<Object> {    private final Gson gson;    public GsonProvider() {      gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().setDateFormat(          "yyyy-MM-dd").create();    }    public boolean isReadable(Class<?> type, Type genericType, Annotation[] annotations,        MediaType mediaType) {      return true;    }    public Object readFrom(Class<Object> type, Type genericType,        Annotation[] annotations, MediaType mediaType,        MultivaluedMap<String, String> httpHeaders, InputStream entityStream)        throws IOException, WebApplicationException {      return gson.fromJson(new InputStreamReader(entityStream, "UTF-8"), type);    }    public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations,        MediaType mediaType) {      return true;    }    public long getSize(Object obj, Class<?> type, Type genericType,        Annotation[] annotations, MediaType mediaType) {      return -1;    }    public void writeTo(Object obj, Class<?> type, Type genericType,        Annotation[] annotations, MediaType mediaType,        MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream)        throws IOException, WebApplicationException {      entityStream.write(gson.toJson(obj, type).getBytes("UTF-8"));    } }

使用JAX-RS简化REST应用开发(6)

时间:2011-01-29 IBM 殷钢 张昊

JAX-RS 与 JPA 的结合使用

由于 JAX-RS 和 JPA 同样都使用了基于 POJO 和标注的编程模型,因而很易于结合在一起使用。示例应用中的 Web 资源 ( 如账目 ) 同时也是持久化到数据库中的实体,同一个 POJO 类上既有 JAXB 的标注,也有 JPA 的标注 ( 或者还有 Gson 的标注 ) ,这使得应用中类的个数得以减少。如 清单 7 所示,Account 类可以在 JAX-RS 与 JPA 之间得到复用,它不但可以被 JAX-RS 绑定为请求体 / 响应体的 XML/JSON 数据,也可以被 JPA 持久化到关系型数据库中。

清单 7. Account

@Entity @Table(name = "TABLE_ACCOUNT") @XmlRootElement public class Account {    @Id    @

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号