前言

github: https://github.com/vergilyn/SpringBootDemo

代码位置:


一、准备

spring boot对jersey1.x与jersey2.x的注入方式有区别。本文是针对2.x的配置(服务端,不包含客户端调用。)

需要依赖的POMs

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jersey</artifactId>
</dependency>

jersey的配置与别的不同的是:需要一个ResourceConfig类型的@Bean,用于注册所有的端点(endpoints)。

二、demo

2.1 用于注册所有endpoints的Config
/* 想要开始使用Jersey 2.x只需要加入spring-boot-starter-jersey依赖,
* 然后你需要一个ResourceConfig类型的@Bean,用于注册所有的端点(endpoints,demo为JerseyController)。
*/
//@Component
@Configuration
//Jersey servlet将被注册,并默认映射到/*。可将@ApplicationPath添加到ResourceConfig来改变该映射。
@ApplicationPath("/rest")
public class JerseyConfig extends ResourceConfig {
public JerseyConfig() {
register(JerseyController.class);
// packages("com.vergilyn.demo.springboot.jersey"); // 通过packages注册。
}
}
2.2 endpoints
/*
* 所有注册的端点都应该被@Components和HTTP资源annotations(比如@GET)注解。
* 1、因为是@Component,所以其生命周期受Spring管理。
* 并且你可以使用@Autowired添加依赖及使用@Value注入外部配置。
*/
//@Component
@RestController
@Path("/jersey")
public class JerseyController {
@GET
@Path("/get")
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Produces(MediaType.APPLICATION_JSON)
public Map<String, Object> getMessage() {
return Constant.map;
} @POST //POST形式在浏览器地址栏输入请求路径不一定能访问到。推荐用fiddler工具或者firefox浏览器插件(poster或HttpRequester) @Path("/post")
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Produces(MediaType.APPLICATION_JSON)
public Map<String, Object> postMessage() {
return Constant.map;
}
}

到此需要注意的有:

1. 如果是post形式,浏览器不一定可直接访问得到json。最好用Fiddler工具或者FireFox浏览器插件(Poster或HttpRequester)测试接口。

2. 既然是RESTful,所以建议直接用@RestController,而并不建议使用@Controller。

3. 所有注册的端点都应该被@Components和HTTP资源annotations(比如@GET)注解。

2.3 SpringApplication
@SpringBootApplication
public class JerseyApplication {
/* 代码注入:
* 此种方式需注意:ServletRegistrationBean的配置,及最终的请求路径。
* 注解注入:
* JerseyConfig.java中用@Configuration
*/
// @Bean
public ServletRegistrationBean jerseyServlet() {
/* 特别注意此路径,与JerseyController中的@Path。可能让最终路径变成:localhost:8080/rest/jersey/get
* rest是此ServletRegistrationBean定义的(同ResourceConfig的类注解@ApplicationPath("/rest"))
* jersey是Controller中类注解@Path定义的
*/
ServletRegistrationBean registration = new ServletRegistrationBean(
new ServletContainer(), "/rest/*");
// our rest resources will be available in the path /rest/*
registration.addInitParameter(ServletProperties.JAXRS_APPLICATION_CLASS,
JerseyConfig.class.getName());
return registration;
} public static void main(String[] args) {
SpringApplication.run(JerseyApplication.class, args);
}
}

到此,所有的jersey2.X服务端代码就算完成。

如果是get请求,那么浏览器直接请求:localhost:8080/rest/jersey/get 就可以得到返回的json结果。(虽然代码中get返回的是Map,但定义@Produces(MediaType.APPLICATION_JSON))

至于请求参数的接收、客户端的调用,和spring集成Jersey是差不多的。这主要是用spring boot集成Jersey,不细说Jersey。

(很早之前的看的一篇jersey的教程:使用 Jersey 和 Apache Tomcat 构建 RESTful Web 服务

(题外话:记得当初在spring中使用jersey的一个问题是,在endpoints中无法注入其他service/dao的bean。然后,貌似记得是通过spring的上下文强制getBean()才把别的service/到注入到了enpoint中。不清楚是那框架搭建有问题,还是怎么的,只是记得遇到过这奇怪的问题。)

【spring boot】SpringBoot初学(5)– WebService之Jersey的更多相关文章

  1. Spring Boot 使用 CXF 调用 WebService 服务

    上一张我们讲到 Spring Boot 开发 WebService 服务,本章研究基于 CXF 调用 WebService.另外本来想写一篇 xfire 作为 client 端来调用 webservi ...

  2. Spring Boot 使用 JAX-WS 调用 WebService 服务

    除了 CXF 我们还可以使用 Spring Boot 自身默认的组件 JAX-WS 来实现 WebService 的调用. 本项目源码 github 下载 1 新建 Spring Boot Maven ...

  3. Spring Boot]SpringBoot四大神器之Actuator

    论文转载自博客: https://blog.csdn.net/Dreamhai/article/details/81077903 https://bigjar.github.io/2018/08/19 ...

  4. jersey在 spring boot 添加 packages 扫描路径支持

    最近公司内部系统要做数据对接,故使用 jersey 来做 restful webservice 接口设计.由于 spring boot 已经集成 jersey,估计直接导入 spring-boot-s ...

  5. Spring Boot SOAP Webservice例子

    前言 本文将学习如何利用Spring boot快速创建SOAP webservice服务: 虽然目前REST和微服务越来越流行,但是SOAP在某些情况下,仍然有它的用武之地: 在本篇 spring b ...

  6. 在spring boot微服务中使用JWS发布webService

    发布时间:2018-11-22   技术:Java+spring+maven   概述 在springboot微服务中使用JWS发布webService,在服务启动时自动发布webservice接口. ...

  7. Spring Boot 开发 WebService 服务

    WebService 虽然现在大部分互联网企业不太提倡使用,但在以第三方接口为主导的市场,对方来什么接口你还得用什么接口,不可能把接口重写了.例如大部分传统的大型企业都在用 WebService,并且 ...

  8. Spring boot+CXF开发WebService

    最近工作中需要用到webservice,而且结合spring boot进行开发,参照了一些网上的资料,配置过程中出现的了一些问题,于是写了这篇博客,记录一下我这次spring boot+cxf开发的w ...

  9. Springboot 系列(六)Spring Boot web 开发之拦截器和三大组件

    1. 拦截器 Springboot 中的 Interceptor 拦截器也就是 mvc 中的拦截器,只是省去了 xml 配置部分.并没有本质的不同,都是通过实现 HandlerInterceptor ...

  10. Spring Boot+CXF搭建WebService(转)

    概述 最近项目用到在Spring boot下搭建WebService服务,对Java语言下的WebService了解甚少,而今抽个时间查阅资料整理下Spring Boot结合CXF打架WebServi ...

随机推荐

  1. CCF_ 201403-3 _命令行选项

    不要怀疑,这题跟CCF_201604-3_路径解析一样恶心,很多中情况,要仔细读题,注意细节. 写的比较乱. #include<iostream> #include<cstdio&g ...

  2. HDU_5602_概率dp

    http://acm.hdu.edu.cn/showproblem.php?pid=5602 dp[1][i][j]表示轮到第二个人操作时,第一人总和i,第二人总和j,第一人胜的最小概率(因为每个人都 ...

  3. 用python制作训练集和测试集的图片名列表文本

    # -*- coding: utf-8 -*- from pathlib import Path #从pathlib中导入Path import os import fileinput import ...

  4. 创建一个JavaWeb工程

    1.用到的工具:eclipse编译器+Tomcat9,在自己电脑上已配置好jdk和tomcat的环境变量 2.新建一个project 2.选择web文件中的Dynamic Web project,进入 ...

  5. lwip的netif状态管理

    netif的状态变化可以设置回调函数, 主要有三项变化, 1 netif up or down,address change,address state change(IPv6) 2 link up ...

  6. JMeter接口测试-如何循环使用接口返回的多值?

    前言 在用JMeter做接口测试的时候,经常会遇到这样一种情况:一个接口请求返回了多个值,然后下一个接口想循环使用前一个接口的返回值:第二种情况:只想循环请求前一个接口返回值中的随机不定长度的某一些值 ...

  7. .gitignore配置规则

    1.gitignore文件 在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改 .gitignore 文件的方法.这个文件每一行保存了一个匹配的规则例如: # 此为注释 – 将被 ...

  8. OptaPlanner 7.32.0.Final版本彩蛋 - SolverManager之批量求解

    上一篇介绍了OptaPlanner 7.32.0.Final版本中的SolverManager接口可以实现异步求解功能.本篇将继续介绍SolverManager的另一大特性 - 批量求解. 适用场景 ...

  9. MySQL 数据库的提速器-写缓存(Change Buffer)

    写缓存(Change Buffer) 是一种特殊的数据结构,用于在对数据变更时,如果数据所在的数据页没有在 buffer pool 中的话,在不影响数据一致性的前提下,InnoDB 引擎会将对数据的操 ...

  10. 试题 基础练习 Huffuman树

    试题 基础练习 Huffuman树 试题 基础练习 Huffuman树 ​ 翻了翻网上,基本都是暴力排序.我就提供一个最小堆的写法吧! ​ 点击这里,跳转查看最小堆插入删除函数的简单写法 Talk i ...