jersey 框架传输格式 (2) xml
XML作为日常开发中一种常用的传输格式。jersey 也做了很优秀的支持。 我学习 《Java RESTful Web Service 实战》 一书。书中有些知识点,不太常用,但是比较重要,特写下次笔记已备忘。 jersey是遵循 JAX-RS2.0规范的一个实现,旨在使用java提供RESTful服务的框架 java 中对xml文档的处理有两大标准,
JAXP 标准 对应的,JAXP定义了三种标准类型的输入接口 Source(DOMSource,SAXSource,StreamSource) 和输出接口, Result(DOMResult,SAXResult,StreamReault)。jersey 可以使用JAXP的输入类型最为REST方法的参数。 java// StAX @POST @Path("stream") @Consumes(MediaTYpe.APPLICATION_XML) @Produces(MediaType.APPLICATION_XML) public StreamSource getStreamSource( // 接收 类型 javax.xml.transform.stream.StreamSource streamSource) { // 返回 类型。 return streamSource; } ```java
优缺点:JAXP的缺点是需要编码解析XML,这样正加了开发成本,但对于业务逻辑的实现没有实际贡献。JAXB只需要在POJO中定义相关的注解(早起人们是使用XML配置文件老做这件事),使其和XML的schema对应,无需对XML进行程序是解析,弥补了JAXP的这一缺点。 使用JAXB的开发效率更高,相对于JAXP的性能更高。开发过程简化,执行逻辑简化,是的JAXP带来的优势就可以基本忽略不计,综合考量,实现起来更简单的JAXB更适合REST开发。 jersey支持使用JAXBElement作为REST方法参数形式,也支持直接使用POJO作为REST方法参数的形式,这种形式更为常用。示例代码如下。 java@POST @Path("jaxb") @Consumes(MediaTYpe.APPLICATION_XML) @Produces(MediaType.APPLICATION_XML) public Book getEntity(JAXBElement<Book> booElement){ Book book = booElement.getValue(); System.out.println(book.getBookName()); return book; } // book 实体类 @XmlRootElement public class Book implements Serializable { @XmlAttribute(name = "bookId") public Long getBookId(){ return bookId; } @XmlAttribute(name = "bookName") public String getBookName(){ return bookName; } @XmlAttribute(name = "publisher") public String getPublisher(){ return publisher; } } Content-Type: application/xml <?xml version="1.0" encoding="UTF-8" standalone="yes" ?><book bookId="1000" bookName="test book"> 如果REST请求的传输数据量很大,并且无需和外系统对接的场景,建议使用属性来组织XML,这样可以极大的减小XML格式的数据包的规模。
jersey 默认设置了 服务器和客户端示例代码如下。 @ApplicationPath("/*") public class AirResourceConfig extends ResourceConfig { public AirResourceConfig () { packages("com.example"); property(MessageProperties.XML_SECURITY_DISABLE,Boolean.TRUE); } } 以上文字片段以及图片,部分来自于 《Java RESTful Web Service 实战》一书。如有版权侵犯,请联系邮箱[ychangsheng@gmail.com]。本人及时修改。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |