当前位置: 首页 > 工具软件 > JAX-RS > 使用案例 >

什么是JAX-RS注释? (第3部分)

慕佑运
2023-12-01

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批注注入HttpServletRequestHttpHeaders实例的快捷方式。

@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的更多信息,那么这些文章将使您感兴趣:

翻译自: https://www.javacodegeeks.com/2017/08/jax-rs-annotations-part-3.html

 类似资料: