前言
图书馆项目controller层代码是由swagger工具定义好的api生成的,在实现接口的时候,出现了@PathParam和@QueryParam,这两个都可以实现功能,究竟有什么不一样呢?
正文
Jersey RESTful 框架是开源的RESTful框架,实现了JAX-RS规范。它是基于Java的一个轻量级RESTful风格的Web Services框架。Jsersey中有几种常用的接收参数的注解:
@PathParam 、@QueryParam 、@FormPaem 、@FormDataParm,本文重点来说一下前两个注解。
@PathParam 注解
使用@PathParam 可以获取URI中指定规则的参数。
例子:
//分页查询所有图书信息
@GET
@Path("/getAllbook/{pageNum}/{pageSize}")
@Produces({ "application/json" })
@ApiOperation(value = "获取图书信息", notes = "根据查询条件获取图书信息 ", response = Book.class, responseContainer = "List", tags="Android")
@ApiResponses(value = {
@ApiResponse(code = 200, message = "获得所有分类", response = Book.class),
@ApiResponse(code = 400, message = "Not Found", response = Book.class) })
public Response getAllbookType(@io.swagger.annotations.ApiParam(value = "图书分类",required=true) @DefaultValue("1") @PathParam("pageNum") int pageNum, @DefaultValue("10") @PathParam("pageSize") int pageSize , @Context SecurityContext securityContext)
throws NotFoundException {
List<TBook> list = TBookRepository.findAll();
return Optional.ofNullable(list)
.map(result -> Response.status(Response.Status.OK).entity(new PaginationEntity(pageNum, pageSize, list)).build())
.orElse(Response.status(Response.Status.NO_CONTENT).build());
}
请求方式:url中直接在斜杠后添加参数值
@QueryParam注解
使用@QueryParam用于获取GET请求中的查询参数,定义路径中的参数信息,每一个参数都对应一个子资源。
例子:
//根据isbn查询图书信息
@GET
//标注类和方法请求的路径,@PathParam和@Path配合使用
@Path("/findBookDetailsByIsbn/{isbn}")
//指定将要返回给client端的数据标识类型为json
@Produces({ "application/json" })
@ApiOperation(value = "点击某本书进入书的详情页", notes = "根据书的书号,查找书的简介,目录,出版社,图书分类 ", response = Book.class, responseContainer = "List", tags="Admin")
@ApiResponses(value = {
@ApiResponse(code = 200, message = "获得查询结果", response = Book.class),
@ApiResponse(code = 400, message = "Not Found", response = Book.class) })
public Response findBookDetailsByIsbn(@ApiParam(value = "图书的ISBN编号",required=true) @QueryParam("isbn") String isbn,@Context SecurityContext securityContext)
throws NotFoundException {
List<TBookBasic> list = BookService.findBookDetailsByIsbn(isbn);
return Optional.ofNullable(list)
.map(result -> Response.status(Response.Status.OK).entity(list).build())
.orElse(Response.status(Response.Status.NOT_FOUND).build());
}
请求方式:url中在后面添加“键值对”形式的参数,该注解定义查询参数,表明是一个查询条件,查询参数组成了查询条件。
PS:注解@QueryParam还可以和@DefaultValue一起使用,@DefaultValue表示预置一个默认值,当请求中不包括该参数时使用这个默认值。
Jersey常用注解
Jersey官方文档
总结
知识的学习在不知不觉中,欢迎大家拍砖。