JAX-RS概述(第1部分)
JAX-RS API构成Java EE平台承诺提供标准驱动技术的重要组成部分。 互联网无处不在的性质以及对微服务体系结构的日益增长的兴趣已将更多的精力放在小型可扩展的自治服务及其互操作性上。 允许微服务彼此之间以及“外部世界”之间进行通信的主要方法是REST,它在开发RESTful API中的用途以及Java EE为此提供的技术是JAX-RS:RESTful Web Services的Java API 。
JAX-RS的目标
JAX-RS API的目标是:
- 基于POJO
提供与POJO一起使用的类/接口和相关批注的集合,以将其公开为Web资源。 - 以HTTP为中心
要将HTTP用作基础网络协议,并在HTTP和URI元素以及相应的API类和注释之间提供清晰的映射。 - 格式独立
适用于各种HTTP实体主体内容类型,并提供必要的可插入性以允许添加其他类型。 - 容器独立性
为了确保使用该API的工件可以部署在一系列Web服务器中。 - 包含在Java EE中
允许在Web资源类中使用Java EE功能和组件。
JAX-RS注释概述
JAX-RS API中的注释用于在Web资源周围提供元数据。 一个典型的示例是将@GET注释与@Path注释一起使用,以标识应处理对@Path注释中的指定URI的GET请求的方法。
接下来是对标记的快速概述,这些标记可用于标记用于构造Web资源的方法和类。 这不是一个详尽的列表,JAR-RS军械库中还有更多注释,但是由于JAX-RS的大部分工作是在配置和处理Web资源中,因此您可以在其中找到大部分已使用的API批注。
这是由三部分组成的系列文章中的第一个介绍JAX-RS批注的文章。
第二部分介绍:
- @Path注释和@PathParam
- @QueryParamter批注
- @Produces批注
- @Consumes批注
第三部分介绍:
- @FormParam批注
- @MatrixParam批注
- @CookieParam批注
- @HeaderParam批注
- @Provider批注
让我们开始吧。
@ApplicationPath批注
让我们从具有@ApplicationPath批注的树的顶部开始:
@ApplicationPath("/api")
public class RESTConfig extends Application {}
从这里开始定义资源的URI。 在这里,我们说所有的资源都可以在/ api根目录下找到。 该URL应该如下所示: http:// localhost:8080 / webcontext / api / ,其中webcontext是应用程序的名称。
@Path注释
接下来,是资源的URI路径。 在书店应用程序中,它可能是/ books / 。
@Path("/books")
public class BookResource {}
现在,书籍资源的URI为/ api / books ,URL为http:// localhost:8080 / webcontext / api / books。 按照惯例,将资源命名为名词和复数形式。
一旦定义了我们的资源路径,就为HTTP方法和上下文类型配置了单独的资源方法。 这就是乐趣的开始。
每个HTTP方法都有一个注释。
@GET HTTP方法注释
具有@GET批注的方法批注响应HTTP get请求。
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getAllBooks() {List<Book> books = BookRepository.getAllBooks(); // queries database for all booksGenericEntity<List<Book>> list = new GenericEntity<List<Book>>(books) {};return Response.ok(list).build();
}
请注意, GenericEntity包装器用于将List的通用类型维护为Book。
@POST HTTP方法注释
带有@POST注释的方法会响应POST方法的请求。
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response saveBook(Book book) {book = bookRepository.saveBook(book);return Response.ok(book).build();
}
POST HTTP方法通常用于创建资源。 此示例代码将新书对象保留在数据库中。
@PUT HTTP方法注释
@PUT批注用于更新记录,并以这种方式注释的方法响应HTTP PUT请求。
@PUT
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response updateBook(Book book) {book = bookRepository.updateBook(book);return Response.ok(book).build();
}
@DELETE HTTP方法注释
标有@DELETE的方法应删除资源。
@DELETE
@Path("{isbn}")
@Produces(MediaType.APPLICATION_JSON)
public Response deleteBook(@PathParam("isbn") String isbn) {Book book = bookRepository.deleteBookByIsbn(isbn);return Response.ok(book).build();
}
通常,如本例所示,资源或其ID从URI变量传递到资源方法参数。
@OPTIONS HTTP方法注释
用@OPTIONS注释的方法响应HTTP Option请求。
@OPTIONS
public Response preflight() {return Response.ok().header("Allow", true).build();
}
当客户端希望向其他域发出复杂的HTTP请求时,将options方法用作请求。 这样做是为了确定是否允许客户端提出请求。
@HEAD HTTP方法注释
HTTP HEAD方法与HTTP GET方法相同,除了服务器不得在响应中使用正文进行响应。
@HEAD
public Response headsUp() {return Response.ok().build();
}
此方法用于获取有关实体的元数据,而无需发回实体主体本身。
代码库
本文的源代码位于我的GitHub存储库中 。 我所有文章的代码都在ReadLearnCode文章存储库中。
接下来是什么?
就是第一部分,接下来是第二部分,您将在其中了解有关用于制作RESTful Web端点的注释的更多信息。
进一步阅读
我已经发布了更多有关JAX-RS的文章,希望您对此感兴趣:
- JAX-RS 资源实体是有关创建资源实体的文章
- 是否曾经想过@ javax.ws.rs.core.Context 批注是关于什么的?
- 了解有关@Consumes和@Produces批注的更多信息,最后
- 您不能在不了解bean验证失败管理的情况下编写健壮的端点
翻译自: https://www.javacodegeeks.com/2017/08/jax-rs-annotations.html