使用RESTEasy 和 Jersey创建JAX-RS CRUD Rest Web服务
我们将建造什么?
我们正在构建一个简单的 用户管理应用程序,它具有以下 CRUD Rest API。
什么是 JAX-RS?
JAX-RS HTTP 注释
- @GET - 表示注解的方法响应 HTTP GET 请求
- @POST - 表示被注解的方法响应一个 HTTP POST 请求
- @DELETE - 表示注解的方法响应 HTTP DELETE 请求
- @PUT - 表示注解的方法响应 HTTP PUT 请求
什么是 RESTEasy?
什么是 Jersey ?
使用的工具和技术
- JDK 1.8 或更高版本
- Maven 3.5+
- NetBeans IDE
- JAX-RS 2.0 +
- RESTEasy
- Jersey
- Tomcat 8.5+
开发步骤
- 在 IDE 中创建一个 Maven Web 项目
- 添加 Maven 依赖项
- 项目结构
- 创建用户模型类
- 创建一个用户服务类
- 创建一个 UserResource 类
- 创建应用程序类
- REST API 的客户端
- 结论
1.在IDE中创建一个Maven Web项目
2.添加maven依赖
<?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.创建用户模型类
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类
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类
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();}}
}
- @Path 注释指定资源响应的 URL 。
- @GET 注解表示被注解的方法响应 HTTP GET 请求。
- @Produces 注释用于指定资源可以生成并发送回客户端的 MIME 媒体类型。
- 创建新资源时,我们使用 @POST 注解。
- @Consumes 注释用于指定资源可以从客户端接受或使用的表示的 MIME 媒体类型。
7. 创建应用类
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;}
}
8. REST API 的 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创建JAX-RS CRUD Rest Web服务相关推荐
- 使用 Jersey 和 Apache Tomcat 构建 RESTful Web 服务
http://www.ibm.com/developerworks/cn/web/wa-aj-tomcat/ 使用 Jersey 和 Apache Tomcat 构建 RESTful Web 服务 Y ...
- jersey tomcat MySQL_基于jersey和Apache Tomcat构建Restful Web服务(一)
基于jersey和Apache Tomcat构建Restful Web服务(一) 现如今,RESTful架构已然成为了最流行的一种互联网软件架构,它结构清晰.符合标准.易于理解.扩展方便,所以得到越来 ...
- ASP.NET 创建、发布、使用Web服务的详细方法
一.创建Web服务 1.首先,打开VS(本例以VS2017为例).创建一个ASP.NET Web 应用程序,位置和名称自定义,本例我把这个项目创建在桌面,名字叫helloWho.然后点击[确定],在弹 ...
- go : go gin mysql 创建一个简单的后端web服务
吃别人吃不了的苦,忍别人受不了的气,付出比别人更多的,才会享受的比别人更多 !!! 具体代码在: https://gitee.com/hjx_RuGuoYunZhiDao/strom-huang-go ...
- spring创建web项目_使用Spring WS创建合同优先的Web服务
spring创建web项目 1引言 本文介绍了如何使用来实现和测试SOAP Web服务 Spring Web Services项目 . 本示例将JAXB2用于(取消)编组. 为了开发服务,我将使用合同 ...
- 使用Spring WS创建合同优先的Web服务
1引言 本文介绍了如何使用来实现和测试SOAP Web服务 Spring Web Services项目 . 本示例使用JAXB2进行(取消)编组. 为了开发服务,我将使用合同优先的方法,该方法首先定义 ...
- resteasy 客户端java_RestEasy Web服务客户端调用
RestEasy Web服务客户端调用 l 背景 在前几篇文章中,我介绍了用RestEasy 框架搭建的Rest风格的java web服务.这几天事情比较多,一直没有写客户端的调用方法.现在就谈一下客 ...
- jax rs mysql_liferay7-rest开发JAX-RS规范详解
简介 JAX-RS (JSR-311) 是为 Java EE 环境下的 RESTful 服务能力提供的一种规范.它能提供对传统的基于 SOAP 的 Web 服务的一种可行替代. 在本文中,了解 JAX ...
- JAX-RS(基于Jersey) + Spring 4.x + MyBatis构建REST服务架构
0. 大背景 众所周知,REST架构已经成为现代服务端的趋势. 很多公司,已经采用REST作为App, H5以及其它客户端的服务端架构. 1. 什么是JAX-RS? JAX-RS是JAVA EE6 引 ...
最新文章
- 《2018-2019世界智能手机AI智商测试报告》发布会将在京举办
- 反映参数名称:滥用C#lambda表达式还是语法亮度?
- java 实例化对象的几种姿势
- delphi 如何判断编码格式,解决乱码问题
- chisel快速入门(三)
- 使用DispatcherTimer计时器
- spring boot 1.5.4 定时任务和异步调用(十)
- 关于树的递归问题的一些总结
- MySQl数据库常用的DOS命令
- swift 如何在IOS应用图标上添加消息数
- C#操作base64文件
- 运维工程师常见软件故障_软件故障分类| 软件工程师
- 【图像处理】图像锐化
- Heuristic function
- 查看mysql中SQL的执行计划
- 雅虎首席产品官Blake Irving:打造个性化产品的“架子鼓手”
- 什么是Hadoop以及Hadoop集群
- 图灵机跟现实电子计算机哪个计算能力强,计算机不是只会“计算”,图灵机也不是一台“机器”|AI那厮...
- 常见的web攻击手段
- ORB_SLAM系列总结
热门文章
- CSS 背景色 背景图片 渐变背景 - 重复线性渐变 background-image: repeating-linear-gradient()
- Hadoop集群环境配置搭建
- android 设置屏幕界面横向的方法
- C++随机字符串(可以包含中文)
- 神经网络的概念和基本用法
- 通过nmap的nse脚本(dns-brute.nse)扫描和收集子域名
- 802.11--802.11ax协议
- 《图解易经:一本终于可以读懂的易…
- 分享2020版详细搭建IPTV服务器教程
- 硬核HashMap源码分析,HashMap文章中的圣经