Jersey框架简单实践(一)
目录
- 一、RESTful
- 二、Jersey框架
一、RESTful
REST(Representational State Transfer 表现层状态转化) 是一组架构约束,而不是协议或标准。通常定义:
- 每一个URI代表一种资源;
- 客户端和服务器之间,传递这种资源的某种表现层;
- 客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。
一般实现了RESTful的架构更结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。
二、Jersey框架
Jersey是一个RESTful服务JAVA框架,与常规的JAVA编程使用的Struts框架类似,它主要用于处理业务逻辑层。Jersey是一个是 webservice框架。
通过简单的配置,即可打造极简主义的REST接口。其实就是可以把我们的服务层开放API供前端调用。
与SpringMVC的区别:
Jersey同样提供DI,是由glassfish hk2实现,也就是说,如果想单独使用Jersey一套,需要另外学习Bean容器;
MVC出发点是WEB,但Jersey出发点是RESTful,体现点在与接口的设计方面,如MVC返回复杂结构需要使用ModelAndView,而Jersey仅仅需要返回一个流或者文件句柄;
Jersey提供一种子资源的概念,这也是RESTful中提倡所有url都是资源;
Jersey直接提供application.wadl资源url说明;
MVC提供Session等状态管理,jersey没有,这个源自RESTFull设计无状态化;
Response方法支持更好返回结果,方便的返回Status,包括200,303,401,403;
提供超级特别方便的方式访问RESTful;
以下是demo案例:
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"><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.4.RELEASE</version></parent><modelVersion>4.0.0</modelVersion><artifactId>jersey</artifactId><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jersey</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies>
</project>
Jersey配置,需要被Spring扫描到:
1、自定义资源配置类继承类ResourceConfig,通过register方法注册自己的资源。
2、在bean中新建资源配置类ResourceConfig,并返回此config。
注册我们的服务的时候有两种方式,一种是直接将类注册进去,一种是通过扫描包,建议是使用注册类的方式,比较好控制。如果服务非常多,使用包扫描的方式也可,自行定夺。
package org.self.zhlxf.config;import org.glassfish.jersey.jackson.internal.jackson.jaxrs.json.JacksonJsonProvider;
import org.glassfish.jersey.server.ResourceConfig;
import org.self.zhlxf.service.impl.UserService;
import org.springframework.context.annotation.Configuration;import javax.ws.rs.ApplicationPath;@Configuration
@ApplicationPath("/") // 这里指定了路由的根路径,可自行配置,习惯用/
public class JerseyConfig extends ResourceConfig {public JerseyConfig() {// 注册json解析register(JacksonJsonProvider.class);// 通过类名单个注册register(UserService.class);// 通过扫描包注册包里面的所有服务// packages("org.self.zhlxf.service");}
}
编写统一的返回对象:
package org.self.zhlxf.pojo;public class ApiResponseBody<T> {private Integer code;private T data;private String message;public ApiResponseBody() {}public ApiResponseBody(Integer code, T data, String message) {this.code = code;this.data = data;this.message = message;}public Integer getCode() {return code;}public void setCode(Integer code) {this.code = code;}public T getData() {return data;}public void setData(T data) {this.data = data;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}@Overridepublic String toString() {return "ApiResponseBody{" +"code=" + code +", data=" + data +", message='" + message + '\'' +'}';}
}
编写服务类:
package org.self.zhlxf.service;import org.self.zhlxf.pojo.ApiResponseBody;public interface IUserService {ApiResponseBody allUser();String getUserById();
}
package org.self.zhlxf.service.impl;import org.jvnet.hk2.annotations.Service;
import org.self.zhlxf.pojo.ApiResponseBody;
import org.self.zhlxf.pojo.User;
import org.self.zhlxf.service.IUserService;import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import java.util.ArrayList;
import java.util.List;@Service
@Path("/user")
public class UserService implements IUserService {@GET@Override@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")public ApiResponseBody allUser() {List<User> ant = new ArrayList<>();for (int i = 0; i < 10; i++) {ant.add(new User("小明" + i + "号", 5 + i));}return new ApiResponseBody(200, ant, "success");}@GET@Path("/{id}")@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")@Overridepublic String getUserById() {return "小明";}
}
浏览器调用:localhost:8080/user
至此,一个基于jersey框架的RESTful简单demo就完毕了,更多的服务自行注册即可。
Jersey框架简单实践(一)相关推荐
- RPC - 如何动手实现一个简单RPC框架 - 学习/实践
1.应用场景 主要用于学习RPC的原理,工作流程,拆解和组装一个简单的RPC框架. 2.学习/操作 1.文档阅读 31 | 动手实现一个简单的RPC框架(一):原理和程序的结构-极客时间 32 | 动 ...
- Dubbo入门(2) - 简单实践
作者:不洗碗工作室 - Marklux 出处:Dubbo入门(2) - 简单实践 版权归作者所有,转载请注明出处 在了解什么是分布式框架之后,我们需要上手实践一下,来了解整个系统是如何运作起来的. 本 ...
- 深度学习——RNN原理与TensorFlow2下的IMDB简单实践
在深度学习中,RNN是处理序列数据的有效方法之一,也是深度的一种很好的体现,本文将简单介绍RNN的工作方式,以及针对IMDB数据集的简单实践 RNN简介 RNN(Recurrent Neural Ne ...
- Jersey框架和springmvc框架
目录 前言: 一:Rest接口简介 1:Rest介绍 2:Rest风格下的url 二:Jersey框架介绍 1:什么是Jersey框架介绍 2:导入jerseyjar包 3:修改web.xml,添加一 ...
- 干货 | 如何在京东云上简单实践CI流程
如何在京东云上简单实践CI流程 在如今的互联网时代,随着软件开发复杂度的不断提高,软件开发和发布管理也越来越重要.目前已经形成一套标准的流程,最重要的组成部分就是持续集成及持续交付.部署.在此,我们在 ...
- [See How]全栈Node TS框架TSRPC实践教程(一)
博客和公众号 此文已同步到因卓诶博客,请大家关注同名公众号 [See How]全栈Node TS框架TSRPC实践教程(一)www.yinzhuoei.com 前言 某个普通的一天的早晨,水友群的小 ...
- Java单元测试框架与实践(Junit5 + Mockito)
Java单元测试框架与实践 本文首先在理论上归纳了单元测试在宏观和微观层面要遵循的基本原则,以及测试覆盖率的要求和评价维度.然后具体阐述了笔者实战中总结的基于Junit + Mockito 的单元测试 ...
- 滴滴大型微服务框架设计实践
导读:在不久前的 Gopher China 大会中,滴滴高级专家工程师杜欢以<大型微服务框架设计实践>为主题的深度分享. ---- 大家好,我是杜欢,很荣幸能代表滴滴来做分享.我来滴滴的第 ...
- 滴滴杜欢:大型微服务框架设计实践
杜欢:滴滴出行 / R lab 高级专家工程师 先后在微软和百度任职.曾自主创业作为创始⼈和 CTO ,专注于游戏领域创新项⽬研发落地.2015 年⾄今:历任滴滴出⾏平台产品中⼼技术负责⼈.出⾏创新业 ...
- 二次封装图片第三方框架——简单工厂模式的运用
CSDN首发地址: 前言 写在前头,这篇博客对于老司机们没什么多大的意义,老司机们就不用看了,对于新手还是有很大实用价值的. 平时在项目中,你们有没有遇到这样的情况,比如之前项目是使用开源框架Imag ...
最新文章
- html中加入超链接方式的汇总
- view 注册服务器,view服务器ip地址
- mybatis之动态SQL操作之查询
- php双引号解析漏洞
- mysql语法替换字符串
- 区分错误类型_数仓|几种SQL隐藏的错误,你遇到过吗?
- linux用什么剪辑视频教程,Linux 上的开源视频剪辑软件Olive
- 手机mt4一键平仓所有_手机一键就能提取PPT所有文字!10秒完成,这波操作好用到你害怕...
- 阿里云CentOS 7中zabbix4.2配置shell脚本邮件报警
- 经典水晶报表设计三则
- 死磕 java同步系列之JMM(Java Memory Model)
- gbdt 算法比随机森林容易_数据挖掘面试准备(1)|常见算法(logistic回归,随机森林,GBDT和xgboost)...
- NWT失败反省:不想办法开展业务,天天想着让别人不能用
- steam安裝位置linux,「Linux」- 安装 Steam 客户端 @20210219
- 实验9 面向对象程序设计方法
- 第12周 上机报告 1之练习3 回文日
- 2023年浙江交安安全员考试题库及答案
- Explain是什么?Explain能干嘛?
- 【转】电子毕业设计题目
- qlib的工作流管理:mlflow机器学习生命周期管理平台
热门文章
- OpenCL编程实例: 向量计算
- http://bbs.3dmgame.com/forum.php,3DM游戏运行库合集安装包v2.9
- 2022美国大学生数学建模竞赛(美赛)思路代码
- STM32学习心得三十一:485通信原理及实验
- Fontmin字体生成,网站开发字体生成,@font-face字体格式生成,html网站字体引入,html网站字体格式转换器
- 金蝶K3数据库表名对应及表说明
- mcuisp下载程序
- 【安卓作业】星座查询小程序
- verilog模块自动例化perl脚本
- 语音识别之DTW算法的应用(Python)