在本教程中,我们将学习如何使用 RESTEasy 和 Jersey 创建 JAX-RS Get、POST、PUT 和 DELETE Rest Web 服务。

我们将建造什么?

我们正在构建一个简单的 用户管理应用程序,它具有以下 CRUD Rest API。

为用户 资源 创建了以下五个 REST API(控制器处理程序方法)  。
在开始之前,我想给你一个 JAX-RS Java API 的概述。

什么是 JAX-RS?

JAX-RS(用于 RESTful Web 服务的 Java API) 是一组 Java API,为创建 REST API 提供支持。并且该框架很好地利用了 JAX-RS 注解来简化这些 API 的开发和部署。
JAX-RS 2.0 (JSR-339) 和 JAX-RS 2.1 (JSR-370) 是 JCP(Java 社区进程)规范,它们通过 HTTP 协议为 RESTful Web 服务提供 Java API。
一些比较知名的 JAX-RS API 实现是 RESTEasy 和 Jersey。

JAX-RS HTTP 注释

JAX-RS 具有响应 HTTP 请求的注释。
  • @GET  - 表示注解的方法响应 HTTP GET 请求
  • @POST  - 表示被注解的方法响应一个 HTTP POST 请求
  • @DELETE  - 表示注解的方法响应 HTTP DELETE 请求
  • @PUT  - 表示注解的方法响应 HTTP PUT 请求

什么是 RESTEasy?

RESTEasy 是一个用于开发 RESTful Web 服务的 Java 框架。它是 JAX-RS 2.0 规范的完全认证且可移植的实现。
RESTEasy 提供与 JBoss 应用服务器更紧密的集成,但我们可以将它部署在任何 servlet 容器上,如 Tomcat、Jetty 等。

什么是 Jersey ?

Jersey RESTful Web Services,前身为Glassfish Jersey,目前 Eclipse Jersey框架是一个开源框架,用于在 Java 中开发 RESTful Web Services。它提供对 JAX-RS API 的支持并用作 JAX-RS(JSR 311 & JSR 339 & JSR 370)参考实现。
在本教程中,我们使用 tomcat 服务器来部署 RESTEasy 或Jersey Web 应用程序。

使用的工具和技术

  • JDK 1.8 或更高版本
  • Maven 3.5+
  • NetBeans IDE
  • JAX-RS 2.0 +
  • RESTEasy
  • Jersey
  • Tomcat 8.5+

开发步骤

  1. 在 IDE 中创建一个 Maven Web 项目
  2. 添加 Maven 依赖项
  3. 项目结构
  4. 创建用户模型类
  5. 创建一个用户服务类
  6. 创建一个 UserResource 类
  7. 创建应用程序类
  8. REST API 的客户端
  9. 结论

1.在IDE中创建一个Maven Web项目

2.添加maven依赖

这是完整的 Maven pom.xml 文件。它包含依赖项。
RESTEasy:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>RESTEasyContext</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><name>RESTEasyContext</name><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties><dependencies><!-- Set up RESTEasy--><dependency><groupId>org.jboss.resteasy</groupId><artifactId>resteasy-jaxrs</artifactId><version>3.15.3.Final</version></dependency><dependency><groupId>org.jboss.resteasy</groupId><artifactId>resteasy-servlet-initializer</artifactId><version>3.15.3.Final</version></dependency><dependency><groupId>org.jboss.resteasy</groupId><artifactId>resteasy-jackson-provider</artifactId><version>3.15.3.Final</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.0</version><scope>provided</scope></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>2.3</version><configuration><failOnMissingWebXml>false</failOnMissingWebXml></configuration></plugin></plugins></build></project>

Jersey:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>JerseyContext</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><name>JerseyContext</name><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties><dependencies><dependency><groupId>org.glassfish.jersey.media</groupId><artifactId>jersey-media-json-jackson</artifactId><version>2.35</version></dependency><dependency><groupId>org.glassfish.jersey.inject</groupId><artifactId>jersey-hk2</artifactId><version>2.35</version></dependency><dependency><groupId>org.glassfish.jersey.containers</groupId><artifactId>jersey-container-servlet</artifactId><version>2.35</version></dependency><dependency><groupId>org.glassfish.jersey.core</groupId><artifactId>jersey-server</artifactId><version>2.35</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.0</version><scope>provided</scope></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>2.3</version><configuration><failOnMissingWebXml>false</failOnMissingWebXml></configuration></plugin></plugins></build></project>

3、项目结构

有关项目结构和打包结构,请参阅下面的屏幕截图:

context.xml

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/jaxrs-crud-example"/>

4.创建用户模型类

这是一个 用户 模型类。它包含三个属性:  id、  name和 email
package com.example.jaxrs.model;import javax.xml.bind.annotation.XmlRootElement;@XmlRootElement
public class User {private Long id;private String name;private String email;public User() {}public User(Long id, String name, String email) {super();this.id = id;this.name = name;this.email = email;}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}@Overridepublic String toString() {return "User [id=" + id + ", name=" + name + ", email=" + email + "]";}
}

5.创建一个UserService类

让我们创建  为用户对象提供内存存储 的UserService 。UserService 包含 CRUD 合约方法。我们有查找用户、保存用户、更新使用和删除用户的方法。
package com.example.jaxrs.service;import java.util.ArrayList;
import java.util.List;import javax.ws.rs.NotFoundException;import com.example.jaxrs.model.User;public class UserService {private List< User> users = new ArrayList< User>();public List< User> findAll() {users.add(new User(100L,"Ramesh", "ramesh@gmail.com"));users.add(new User(101L,"Tny", "tony@gmail.com"));users.add(new User(102L,"Tom", "tom@gmail.com"));return users;}public User fetchBy(long id) throws NotFoundException {for (User user : findAll()) {if (id == user.getId()) {return user;} else {throw new NotFoundException("Resource not found with Id :: " + id);}}return null;}public boolean create(User user) {return users.add(user);}public boolean update(User user) {for (User updateUser : users) {if (user.getId().equals(updateUser.getId())) {users.remove(updateUser);users.add(user);return true;}}return false;}public boolean delete(Long id) throws NotFoundException {for (User user : users) {if (user.getId().equals(id)) {users.remove(user);return true;}}return false;}
}

6.创建UserResource类

最后,让我们在这里查看一个实际的 CRUD API 定义:
package com.example.jaxrs.resource;import java.util.List;import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;import com.example.jaxrs.model.User;
import com.example.jaxrs.service.UserService;/*** CRUD Rest APIs for User Resource** @author Ramesh Fadatare**/
@Path("users")
public class UserResource {private UserService userService = new UserService();@GET@Produces(MediaType.APPLICATION_JSON)//    @Produces(MediaType.TEXT_PLAIN)public Response getUsers() {List< User> users = userService.findAll();if (!users.isEmpty()) {return Response.ok(users).build();} else {return Response.status(Response.Status.NOT_FOUND).build();}}@Path("/{id}")@GET@Produces(MediaType.APPLICATION_JSON)public Response getUserById(@PathParam("id") Long id) {User user = userService.fetchBy(id);if (user.getId() != null) {return Response.ok(user).build();} else {return Response.status(Response.Status.NOT_FOUND).build();}}@POST@Produces(MediaType.APPLICATION_JSON)@Consumes(MediaType.APPLICATION_JSON)public Response createUser(User user) {boolean result = userService.create(user);if (result) {return Response.ok().status(Response.Status.CREATED).build();} else {return Response.notModified().build();}}@PUT@Path("/{id}")@Consumes(MediaType.APPLICATION_JSON)public Response updateUser(@PathParam("id") long id, User user) {boolean result = userService.update(user);if (result) {return Response.ok().status(Response.Status.NO_CONTENT).build();} else {return Response.notModified().build();}}@Path("/{id}")@DELETE@Produces(MediaType.APPLICATION_JSON)public Response deleteUser(@PathParam("id") Long id) {boolean result = userService.delete(id);if (result) {return Response.ok().status(Response.Status.NO_CONTENT).build();} else {return Response.notModified().build();}}
}

让我们从上面的代码中理解 JAX-RS 注解:
  • @Path 注释指定资源响应的 URL 。
  • @GET  注解表示被注解的方法响应 HTTP GET 请求
  • @Produces 注释用于指定资源可以生成并发送回客户端的 MIME 媒体类型。
  • 创建新资源时,我们使用 @POST 注解。
  • @Consumes  注释用于指定资源可以从客户端接受或使用的表示的 MIME 媒体类型

7. 创建应用类

让我们创建一个应用程序配置类。应用程序定义 JAX-RS 应用程序的组件并提供额外的元数据。javax.ws.rs.core.Application  是一个标准的 JAX-RS 类,您可以实现它以提供有关您的部署的信息:
package com.example.jaxrs.conf;import java.util.HashSet;
import java.util.Set;import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import com.example.jaxrs.resource.UserResource;@ApplicationPath("/restapi")
public class ApplicationConfig extends Application {private Set< Object> singletons = new HashSet< Object>();public ApplicationConfig() {singletons.add(new UserResource());}@Overridepublic Set< Object> getSingletons() {return singletons;}
}

请注意,使用 @ApplicationPath 注释,我们将路径设置为 RESTful Web 服务。

8. REST API 的 RESTEasy 客户端

 这是完整的 Maven pom.xml 文件。它包含依赖项。
RESTEasy:
<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>net.javaguides</groupId><artifactId>RESTEasyClientRESTAPI</artifactId><packaging>war</packaging><version>0.0.1-SNAPSHOT</version><name>RESTEasyClientRESTAPI</name><url>http://maven.apache.org</url><properties><resteasy.version>3.9.3.Final</resteasy.version></properties><dependencies><!-- Set up RESTEasy --><dependency><groupId>org.jboss.resteasy</groupId><artifactId>resteasy-jackson-provider</artifactId><version>${resteasy.version}</version></dependency><!--  RESTEasy Client Dependency --><dependency><groupId>org.jboss.resteasy</groupId><artifactId>resteasy-client</artifactId><version>${resteasy.version}</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><type>jar</type></dependency></dependencies><build><finalName>resteasy-crud-example-tutorial</finalName></build>
</project>

Jersey:

<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>net.javaguides</groupId><artifactId>JerseyClientRESTAPI</artifactId><packaging>war</packaging><version>0.0.1-SNAPSHOT</version><name>JerseyClientRESTAPI</name><url>http://maven.apache.org</url><properties><resteasy.version>3.9.3.Final</resteasy.version></properties><dependencies><dependency><groupId>org.glassfish.jersey.core</groupId><artifactId>jersey-client</artifactId><version>2.35</version></dependency><dependency><groupId>org.glassfish.jersey.inject</groupId><artifactId>jersey-hk2</artifactId><version>2.35</version></dependency><dependency><groupId>org.glassfish.jersey.media</groupId><artifactId>jersey-media-json-jackson</artifactId><version>2.35</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><type>jar</type></dependency></dependencies><build><finalName>resteasy-crud-example-tutorial</finalName></build>
</project>

package net.javaguides.resteasy;import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Response;import org.junit.Test;import net.javaguides.resteasy.model.User;public class UserResourceMain {private static final String FULL_PATH = "http://localhost:8080/jaxrs-crud-example/restapi/users";public static void main(String[] args) {UserResourceMain urm = new UserResourceMain();urm.testListAllUsers();urm.testGetUser();}@Testpublic void testListAllUsers() {Client client = ClientBuilder.newClient();final WebTarget target = client.target(FULL_PATH);String response = target.request().get(String.class);System.out.println(response);}@Testpublic void testGetUser() {Client client = ClientBuilder.newClient();final WebTarget target = client.target(FULL_PATH + "/100");Response response = target.request().get();User user = response.readEntity(User.class);System.out.println(user.toString());response.close();}@Testpublic void testCreateUser() {Client client = ClientBuilder.newClient();WebTarget target = client.target(FULL_PATH);Response response = target.request().post(Entity.entity(new User(100L,"Amir", "amir@gmail.com"), "application/json"));System.out.println(response.getStatus());response.close();}@Testpublic void testUpdateUser() {User user = new User();user.setName("Ram");user.setEmail("ram@gmail.com");Client client = ClientBuilder.newClient();WebTarget target = client.target(FULL_PATH + "/100");Response response = target.request().put(Entity.entity(user, "application/json"));System.out.println(response.getStatus());response.close();}@Testpublic void testDeleteUser() {Client client = ClientBuilder.newClient();WebTarget target = client.target(FULL_PATH + "/101");Response response = target.request().delete();System.out.println(response.getStatus());response.close();final WebTarget target1 = client.target(FULL_PATH);String response1 = target1.request().get(String.class);System.out.println(response1);}}

结论

在本教程中,我们使用 RESTEasy 和 Jersey创建了一个 CRUD RESTFul 应用程序。该应用程序部署在 Tomcat 上。

使用RESTEasy 和 Jersey创建JAX-RS CRUD Rest Web服务相关推荐

  1. 使用 Jersey 和 Apache Tomcat 构建 RESTful Web 服务

    http://www.ibm.com/developerworks/cn/web/wa-aj-tomcat/ 使用 Jersey 和 Apache Tomcat 构建 RESTful Web 服务 Y ...

  2. jersey tomcat MySQL_基于jersey和Apache Tomcat构建Restful Web服务(一)

    基于jersey和Apache Tomcat构建Restful Web服务(一) 现如今,RESTful架构已然成为了最流行的一种互联网软件架构,它结构清晰.符合标准.易于理解.扩展方便,所以得到越来 ...

  3. ASP.NET 创建、发布、使用Web服务的详细方法

    一.创建Web服务 1.首先,打开VS(本例以VS2017为例).创建一个ASP.NET Web 应用程序,位置和名称自定义,本例我把这个项目创建在桌面,名字叫helloWho.然后点击[确定],在弹 ...

  4. go : go gin mysql 创建一个简单的后端web服务

    吃别人吃不了的苦,忍别人受不了的气,付出比别人更多的,才会享受的比别人更多 !!! 具体代码在: https://gitee.com/hjx_RuGuoYunZhiDao/strom-huang-go ...

  5. spring创建web项目_使用Spring WS创建合同优先的Web服务

    spring创建web项目 1引言 本文介绍了如何使用来实现和测试SOAP Web服务 Spring Web Services项目 . 本示例将JAXB2用于(取消)编组. 为了开发服务,我将使用合同 ...

  6. 使用Spring WS创建合同优先的Web服务

    1引言 本文介绍了如何使用来实现和测试SOAP Web服务 Spring Web Services项目 . 本示例使用JAXB2进行(取消)编组. 为了开发服务,我将使用合同优先的方法,该方法首先定义 ...

  7. resteasy 客户端java_RestEasy Web服务客户端调用

    RestEasy Web服务客户端调用 l 背景 在前几篇文章中,我介绍了用RestEasy 框架搭建的Rest风格的java web服务.这几天事情比较多,一直没有写客户端的调用方法.现在就谈一下客 ...

  8. jax rs mysql_liferay7-rest开发JAX-RS规范详解

    简介 JAX-RS (JSR-311) 是为 Java EE 环境下的 RESTful 服务能力提供的一种规范.它能提供对传统的基于 SOAP 的 Web 服务的一种可行替代. 在本文中,了解 JAX ...

  9. JAX-RS(基于Jersey) + Spring 4.x + MyBatis构建REST服务架构

    0. 大背景 众所周知,REST架构已经成为现代服务端的趋势. 很多公司,已经采用REST作为App, H5以及其它客户端的服务端架构. 1. 什么是JAX-RS? JAX-RS是JAVA EE6 引 ...

最新文章

  1. 《2018-2019世界智能手机AI智商测试报告》发布会将在京举办
  2. 反映参数名称:滥用C#lambda表达式还是语法亮度?
  3. java 实例化对象的几种姿势
  4. delphi 如何判断编码格式,解决乱码问题
  5. chisel快速入门(三)
  6. 使用DispatcherTimer计时器
  7. spring boot 1.5.4 定时任务和异步调用(十)
  8. 关于树的递归问题的一些总结
  9. MySQl数据库常用的DOS命令
  10. swift 如何在IOS应用图标上添加消息数
  11. C#操作base64文件
  12. 运维工程师常见软件故障_软件故障分类| 软件工程师
  13. 【图像处理】图像锐化
  14. Heuristic function
  15. 查看mysql中SQL的执行计划
  16. 雅虎首席产品官Blake Irving:打造个性化产品的“架子鼓手”
  17. 什么是Hadoop以及Hadoop集群
  18. 图灵机跟现实电子计算机哪个计算能力强,计算机不是只会“计算”,图灵机也不是一台“机器”|AI那厮...
  19. 常见的web攻击手段
  20. ORB_SLAM系列总结

热门文章

  1. CSS 背景色 背景图片 渐变背景 - 重复线性渐变 background-image: repeating-linear-gradient()
  2. Hadoop集群环境配置搭建
  3. android 设置屏幕界面横向的方法
  4. C++随机字符串(可以包含中文)
  5. 神经网络的概念和基本用法
  6. 通过nmap的nse脚本(dns-brute.nse)扫描和收集子域名
  7. 802.11--802.11ax协议
  8. 《图解易经:一本终于可以读懂的易…
  9. 分享2020版详细搭建IPTV服务器教程
  10. 硬核HashMap源码分析,HashMap文章中的圣经