jersey学习:注解解析(系列三)


概述

系列二中,PersonResource使用很多的注解,这些注解都是基于jsr311规范实现的,所使用的jar包就是api目录下的javax.ws.rs-api-2.0.1.jar。在早期的1.x版本中使用的是jsr311-api-1.1.1.jar,而javax.ws.rs-api-2.0.1.jar要比jsr311-api-1.1.1.jar功能更加强大,比如@BeanParam,有兴趣的话可以自行查看文档比较两者的差异,这里不再赘述。

下面主要讲一下javax.ws.rs-api-2.0.1.jar常用到的注解。

 

@Path

@Path有两个作用:

  1. 标注class,表明该类是个资源类。凡是资源类,必须使用@Path注解,不然jersey无法扫描到该资源类。
  2. 标注method,表示具体的请求资源的路径

这点和Spring的@RequestMapping不同,@RequestMapping只是简单的注解请求路径而已,@Controller才是表明该类是个action,而@Path一人扮演两个角色。

 

@GET

@GET、@POST、@PUT、@DELETE指明http请求的方式属于get,post,put,delete中的哪一种。具体的指定请求方式,需要在客户端发起请求指定

 

@Consumes

指定http请求的MIME类型,默认是*/*,表示任意的MIME类型。该注解的值是个数组类型,支持多个MIME类型,可以使用MediaType来指定MIME类型(这里我很反感将Consumes直译为消费者,这种翻译会让人晦涩难懂,就是指定请求的MIME类型而已)

 

@Produces

指定http响应的MIME类型,默认是*/*,表示任意的MIME类型。该注解的值是个数组类型,支持多个MIME类型,可以使用MediaType来指定MIME类型(同上,反感将Produces直译为生产者,指定响应的MIME类型)

 

@PathParam

配合@Path来使用的,使用方式在@Path用{}来指定路径中匹配的参数,这种匹配是通过正则表达式来实现的。比如PersonResource使用@Path("/{id}")

 

@QueryParam

@QueryParam获取的参数,实际就是url中拼接在?后面的参数

 

@FormParam

客户端以form(MIME为application/x-www-form-urlencoded)的方式提交表单,服务端使用@FormParam解析form表单中的参数

 

@FormDataParam

通常在上传文件的时候,需要@FormDataParam。客户端提交form(MIME为multipart/form-data)的方式提交表单,服务端使用@FormDataParam来解析form表单中的参数

 

@HeaderParam

获取http请求头中的参数值

 

@CookieParam

获取http请求头中cookie中的参数值

 

@MatrixParam

获取请求URL中的参数中的键值对,必须使用“;”作为键值对的分隔符,比如/person/1;id=1;name=bella;age=22。除此之外呢,@MatrixParam可以接受List参数,尤其是在键值对key相同的时候,就会被解析为List

 

@DefaultValue

@DefaultValue配合@PathParam、@QueryParam、@FormParam、@FormDataParam、@MatrixParam、@HeaderParam、@CookieParam等使用,如果请求指定的参数中没有值,就使用@DefaultValue中的值为默认值。注意:@DefaultValue指定的值在解析过程中出错(比如@DefaultValue("test") @QueryParam("age") int age),将返回404错误。

 

@BeanParam

如果传递的参数较多,可以自己写个bean,bean中的字段使用@PathParam、@QueryParam、@FormParam、@FormDataParam、@MatrixParam、@HeaderParam、@CookieParam来注解。而在resouces中具体方法参数中就可以使用@BeanParam来注解这个自定义的bean

 

@Context

用来注入,和Spring的@AutoWired效果类似。可以注入UriInfo、HttpHeader、ServletConfig、ServletContext、HttpServletRequest、HttpServletResponse等,按照业务需要选择性注入。

 

@Encoded

禁止解码,客户端发送的参数是什么样,服务器接收到的参数就是什么样

 

总结

  1. 按照RESTFUL风格,选择性地使用@GET、@POST、@PUT、@DELETE
  2. 参数的@*Param多样,按照自己的需要来使用
  3. 想了解更多,可以查阅jersey官方文档


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM