JAX-RS注释概述(第3部分)
这是一个由三部分组成的系列,介绍了用于实现REST端点的注释。
在JAX-RS批注的第二部分中,您了解了:
在这一部分中,您将了解有关JAX-RS批注的更多信息。 你准备好了吗? 让我们开始吧。
@FormParam批注
您可能需要直接从主体读取POST HTTP请求中发送的参数,而不是将其序列化为对象。 这可以通过使用@FormParam
批注来完成。
@POST
@Produces(MediaType.APPLICATION_JSON)
public Response saveBookF(@FormParam("title") String title,
@FormParam("author") String author,
@FormParam("price") Float price) {
return Response.ok(bookRepository.saveBook(new Book(title, author, price))).build();
}
@MatrixParam批注
矩阵参数是一组查询参数,用分号(而不是“&”号)分隔。 发生这种情况的原因是,这些值是从多个选择输入框中选择的,并且是通过GET请求而不是POST请求进行设置的。 该网址可能看起来像这样:
http://localhost:8080/api/books;author=atheedom;category=Java;language=english
注释@MatricParam
用于从URI检索参数值并将其分配给方法参数。
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getBookBy(@MatrixParam("author") String author,
@MatrixParam("category") String category,
@MatrixParam("language") String language) {
return Response.ok(
new GenericEntity<List<Book>>(
bookRepository.getBookBy(author, category, language)) {}).build();
}
@CookieParam批注
@CookieParam
批注允许您将其直接注入到客户端发送的资源方法cookie中。 想象一下,您已经向客户发送了一个名为cartId
的cookie,以便您可以跟踪客户的购物车。 要从HTTP请求中提取cookie,只需注释要向其分配cookie数据的方法参数。
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getCart(@CookieParam("cartId") int cartId) {
return Response.ok().build();
}
@HeaderParam批注
@HeaderParam
批注用于将HTTP请求标头值注入资源方法参数。 您可以将其@Context
使用@Context
批注注入HttpServletRequest或HttpHeaders实例的快捷方式。
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getReferrer(@HeaderParam("referer") String referrer) {
return Response.ok(referrer).build();
}
@Provider批注
提供程序用于通过更改运行时的行为来扩展和自定义JAX-RS,以实现一组目标。
提供程序有三种类型:
- 实体提供者
这种类型的提供程序控制数据表示形式(例如JSON和XML)到其对象等效项的映射 - 上下文提供者
这种类型的提供程序控制资源可以使用@Context批注访问的上下文 - 例外提供者
此类提供程序控制Java异常到JAX-RS Response实例的映射。
它们唯一的共同点是它们必须由@Provider
批注标识,并遵循正确的构造函数声明规则。
代码库
本文的源代码位于我的GitHub存储库中 。 我所有文章的代码都在ReadLearnCode文章存储库中。
进一步阅读
如果您有兴趣阅读有关JAX-RS API的更多信息,那么这些文章将使您感兴趣:
- Bean验证失败管理讨论了当输入数据完整性检查失败时如何处理对客户端的响应
- 发现@ javax.ws.rs.core.Context 批注的所有用法
- 使用@Consumes和@Produces批注 ,以及
- JAX-RS资源实体讨论如何创建JAX-RS资源实体
翻译自: https://www.javacodegeeks.com/2017/08/jax-rs-annotations-part-3.html