RS,@QueryParam和@Consume的常用用法是什么?
在网络服务方面,我是新来者。 我负责将现有的软件组件转换为Web服务。 我做了一些研究,并决定使用JAX-RS。 我很难决定何时使用@QueryParam以及何时使用@Consume,因为他们似乎能够实现相同的目标。
例如,假设我有一个名为read()的方法,它将一本书作为参数。
public class AReader { public void read(Book book){...} }
public class Book { public String author; public String name; }
使用JAX-RS注释翻译时,我也可以
我的问题是@QueryParam和@Consume的常见用法是什么。 这仅仅是一种个人偏好,还是有一种惯例?
我发现了许多有关@PathParam和@QueryParam的使用情况的信息,但不是@QueryParam和@Consumes。
提前致谢...
查询参数理想情况下最适合表示与资源表示无关的请求方面。
例如,如果您正在设计一个RESTful Web服务,并且您正在通过POST请求创建一本新书,那么请求的主体应该理想地包含所需媒体类型的资源表示 - application/json
, text/xml
, application/x-www-form-urlencoded
等。通过查询参数提供资源表示application/x-www-form-urlencoded
不在基于HTTP的REST API的设计方式上。 此外,可以省略查询参数,因此提供的资源表示不完整,这违背了需要在POST和PUT操作中提供完整资源表示的设计原则。
查询参数将更适合GET请求。 假设你想要一个分页的请求集合,那么你会接受像/books?start=0&pagesize=10
这样的请求来获得前10本书。
当你说你可以使用@QueryParam和@Consumes实现一个共同的目标时,你是对的,但要注意这些注释的语义是非常不同的。
就你而言,既然你只对两个值感兴趣,在我看来这两种方法都是等价的。 如果您正在处理更复杂的对象(即具有多个属性的POJO),我建议您让JAX-RS实现负责使用@Consumes和/或@Produces注释方法的对象编组/解组。
此示例代码:
@GET
@Path("/books")
public void books(@PathParam("title") String title, @PathParam("author") String author, @PathParam("ISBN") String isbn, @PathParam("category") String category, @PathParam("price") String price) {
Book book = new Book(title, author, isbn, category, price);
...
}
可以减少到
@POST
@Path("/books")
@Consumes(MediaType.APPLICATION_XML)
public void books(Book newBook) {
Book book = newBook;
...
}
另外,REST架构为HTTP动词和代码带来了新的语义。 根据其准则,您不应该使用@POST和@PathParam甚至@GET来修改资源。 请参阅此链接以获取简要说明,但可以随时更详细地探索它(您可以从此处开始)。
在JAX-RS中,您可以使用@QueryParam注释将URI查询参数注入Java方法。 例如,
/users/query?url=nini.com在上面的URI模式中,查询参数是“url = nini.com”,您可以使用@QueryParam(“url”)获取url值。
======
“”http://docs.oracle.com/cd/E19776-01/820-4867/ggqqr/“”
链接地址: http://www.djcxy.com/p/45357.html上一篇: RS, what is the common usage for @QueryParam and @Consume?