什么是JAX-RS注释?

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349418.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle 查询过去一个星期的数据_过去一星期,最懂我的居然是一个表情包

文/黄亚男编辑/大风微信表情包上新快一周了&#xff0c;除了各个聊天对话框、朋友圈&#xff0c;蔓延到了其它社交平台。小黄脸表情伴随着微信的诞生和升级&#xff0c;迄今在微信上已经四次更新。每一次几乎有一个出圈的表情&#xff1a;第一次是“笑哭”&#xff1b;第二次则…

mysql的count报错_Mysql报错注入原理分析(count()、rand()、group by)

报错需要count(*)&#xff0c;rand()、group by&#xff0c;三者缺一不可前提&#xff1a;当行数大于等于3行时才会报错。原链接&#xff1a;https://www.cnblogs.com/xdans/p/5412468.html几个fool()原理解释&#xff1a;selectcount(*),floor(rand(0)*2) from test group by …

1.0jpa 2.0_EasyCriteria 2.0 – JPA标准应该很容易

1.0jpa 2.0在今天的帖子中&#xff0c;我们将看到名为EasyCriteria的框架的新版本。 在这篇文章的结尾&#xff0c;我们将在博客中看到这里的内容。 不幸的是&#xff0c;JPA标准存在一个巨大的问题&#xff0c;即冗长。 为什么不变得更容易&#xff1f; 像这样认为EasyCriteri…

python 从入门到实践_Python编程从入门到实践日记Day15

Python编程从入门到实践日记Day15第5章 字典(三)1.使用字典(三)—由类似对象组成的字典在前面的示例中&#xff0c;字典存储的是一个对象(游戏中的一个外星人)的多种信息&#xff0c;但你也可以使用字典来存储众多对象的同一种信息。例如&#xff0c;假设你要调查很多人&#x…

mysql创建文章表_创建表--文章表article

建MySQL数据表需要以下信息&#xff1a;表名表字段名定义每个表字段字段名 数据类型 数据属性数据属性:1. 无符号 unsigned(非负限定 ,即不能取负值) 取值范围 0–255&#xff1b;2. 主键索引 primary key(唯一,一张表推荐一个主键) &#xff1b;3. 自增 auto_increment &…

什么是JavaServer Faces(JSF)

这是一个分为两部分的系列&#xff0c;其中我介绍了JSF 2及其如何适合Java EE生态系统。 在第1部分中&#xff0c;我将介绍JavaServer Pages&#xff08;JSF&#xff09;背后的基本思想 &#xff0c;在第2部分中&#xff0c;将介绍Facelets声明语言 。 在构建Web应用程序时&a…

python地图散点图_在地图上叠加散点图(img)

好吧&#xff0c;这个问题是老问题&#xff0c;但我有一个不同的答案&#xff0c;可能会有人感兴趣。。。在 我一直在研究同一个问题。GitHub&#xff08;https://github.com/ageron/handson-ml.git&#xff09;上提供的代码可以满足您的需要&#xff08;请参见02“端到端机器学…

mysql创建表时添加范式_MySql三大范式与数据库设计和表创建常用语句

【数据库设计的三大范式】1.第一范式(1NF First Normal Fromate)&#xff1a;数据表中的每一列(字段)&#xff0c;必须是不可拆分的最小单元。也就是确保每一列的原子性。例如&#xff1a; userInfo: ‘山东省烟台市 13181621008’> userAds:’山东省烟台市’tel:’13181621…

asp listview 单元格文字颜色_如何替换CAD表格中特定区域单元格中的文字?

下面是本公众号文章分类目录&#xff0c;点击标题文字可打开分类文章列表&#xff1a;安装卸载 异常、退出 文件及输入输出 基本操作技巧 各种设置及相关问题 界面和显示相关问题 快捷键 视图设置和调整 图层 颜色 线型 字体、文字样式和文字输入 标注、引线和标注…

jvm 方法内联_方法内联在JVM中有多积极?

jvm 方法内联在IntelliJ IDEA中使用Ctrl Alt M 提取方法 。 Ctrl Alt M。 这就像选择一段代码并按此组合一样简单。 Eclipse也有它 。 我讨厌冗长的方法。 对于我来说&#xff0c;闻起来太久了&#xff1a; public void processOnEndOfDay(Contract c) {if (DateUtils.add…

php ssh 连接mysql_通过PHP中的SSH连接到MySQL服务器?mysql-问答-阿里云开发者社区-阿里云...

SSH隧道解决方案 设置到MySQL数据库服务器的SSH隧道(最好是通过Jumpbox以获得安全性)。(A)GUI工具 根据您的要求&#xff0c;您可以使用具有内置SSH隧道支持的GUI MySQL客户端(例如SequelPro)&#xff0c;使用Visual Studio代码 转发端口/创建SSH隧道或使用PuTTY设置端口转发。…

mybatis delete返回值_面试:谈谈你对MyBatis执行过程之SQL执行过程理解

前言在了解了MyBatis初始化加载过程后&#xff0c;我们也应该研究看看SQL执行过程是怎样执行&#xff1f;这样我们对于Mybatis的整个执行流程都熟悉了&#xff0c;在开发遇到问题也可以很快定位到问题。更重要的&#xff0c;在面试中遇到面试官咨询Mybatis的知识点的时候&#…

GC解释:堆

世代垃圾收集器 JVM堆分为两个不同的世代。 一种称为“年轻”&#xff0c;另一种称为“老”&#xff08;有时称为终身制&#xff09;。 年轻一代又分为两个主要的逻辑部分&#xff1a;伊甸园和幸存者空间。 垃圾收集人员还使用了虚拟空间供年轻人和老年人使用&#xff0c;以调整…

ubuntu设置mysql可以非本地访问_ubuntu server下设置mysql的远程访问权限

安装mysql安装mysql的方式较多主要有使用源安装&#xff0c;使用本地压缩包进行安装的方式。 具体参照 【ubuntu安装mysql5.5】检查mysql的远程访问权限eniZ944qtakg9Z:~$netstat -tl | grep mysql#tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTE…

python调用mysql数据库sql语句过长有问题吗_python操作mysql数据库,一次性执行多条语句不执行...

总结&#xff1a;1、使用这种方法&#xff0c;获取到的返回值总是最后一条命令的返回值&#xff0c;如果最后一条命令是update或者delete这种sql&#xff0c;则返回为&#xff08;&#xff09; 2、sql的每一条语句后面都需要添加一个分号&#xff0c;不然最后splice时候 &#…

mysql sql wait 写法_有关SQL语句写法注意的那些事情(原创整理)

前段时候针对开发做的SQL语句写法方面注意点的培训&#xff0c;特意总结了一下&#xff0c;也共享一下。书写SQL需要注意的若干问题(MySQL版)一、基本问题1&#xff0c;在系统中运行的SQL查询&#xff0c;先考虑一下能不能在Slave上检索&#xff0c;目前各个项目中Master上的不…

mysql 时间函数多了8小时_MySQL时间函数了解

NOW() -- 获取当前格式化时间原表mysql> CREATE TABLE blog (-> id INT PRIMARY KEY auto_increment,-> NAME CHAR (32),-> sub_time datetime-> ); Query OK, 0 rows affected (0.01 sec)mysql> INSERT INTO blog (NAME, sub_time)-> VALUES…

JUnit 5 –基础

JUnit 5是适用于Java的下一代单元测试框架&#xff0c;具有许多有趣的功能&#xff0c;包括嵌套测试&#xff0c;参数化测试&#xff0c;新的扩展API或Java 8支持。 本文展示了JUnit 5的基本概念&#xff0c;包括测试生命周期&#xff0c;参数注入和断言&#xff08;基本&…

mysql explain output_MySQL查询优化之explain的深入解析【转载】

在分析查询性能时&#xff0c;考虑EXPLAIN关键字同样很管用。EXPLAIN关键字一般放在SELECT查询语句的前面&#xff0c;用于描述MySQL如何执行查询操作、以及MySQL成功返回结果集需要执行的行数。explain 可以帮助我们分析 select 语句,让我们知道查询效率低下的原因,从而改进我…

char强制类型转换为int_C语言学习第5篇---类型转换概念理解

类型之间的转换1.C语言中的数据可以进行转换---强制类型转换---隐式类型转换强制类型转换1.强制类型转换的语法---&#xff08;Type&#xff09;var_name;---&#xff08;Type&#xff09;value;2.强制类型转换的结果---目标类型能够容纳目标值&#xff0c;结果不变---目标类型…