Spring Boot + Jersey

Jersey是一个非常好的Java REST API库。当你用Jersey实现REST的时候,是非常自然的。同时Spring Boot是Java世界中另一个很好的工具,它减少了程序的应用配置(《初识Spring Boot》)。这篇博客就介绍下如何将Jersey和Spring
Boot结合起来使用。

需要注意的是Jersey本身自带了hk2这样一个DI库,所以,在结合Spring Boot使用的时候,是比较容易搞混淆的。简单的讲,你应该分清楚,哪一部分是由Spring来管理,哪一部分是由Jersey的hk2来管理。

创建一个JerseyConfig类,用来配置Jersey:

public class JerseyConfig extends ResourceConfig {

public JerseyConfig() {

register(JacksonFeature.class);

register(ProductsResource.class);

register(ProductRepository.class);

}

}

其中,ProductsResource是我们的REST API:

@Path("/products")

public class ProductsResource {

@Inject

private ProductRepository productRepository;

//... ...

@GET

@Path("{id}")

@Produces(MediaType.APPLICATION_JSON)

public ProductRefJson getProductById(@PathParam("id") int id) {

final Product product = productRepository.findByProductId(id);

if (product == null) {

throw new ResourceNotFoundException();

}

return new ProductRefJson(product);

}

}

ProductRespository就是我们查找Product的类,这里需要注意的一点是我们看到ProductsResource并不含有类似@Component这样的annotation,这是因为这个类是REST API,它应该由Jersey中的hk2来管理,所以,不要加@Component。

这样,我们已经完成了Jersey REST API所需要的最简配置。下面就是让Spring Boot怎么知道Jersey的存在:

@EnableAutoConfiguration

public class Application{

public static void main(String[] args) {

new SpringApplicationBuilder(Application.class)

.showBanner(false)

.run(args);

}

    @Bean

public ServletRegistrationBean jerseyServlet() {

ServletRegistrationBean registration = new ServletRegistrationBean(new ServletContainer(), "/*");

registration.addInitParameter(ServletProperties.JAXRS_APPLICATION_CLASS, JerseyConfig.class.getName());

return registration;

}

}

启动Application就能运行这个REST Webservie了:

curl -X GET http://localhost:8080/products/1

返回结果:

{"id":1,"name":"apple juice","uri":"/products/1","pricings_uri":"/products/1/pricings","current_price":{"uri":"/products/1/current","price":0},"description":"good"}

博客完成的比较仓促,如果有描述错误或者不准确的地方,欢迎指出来。

Spring Boot + Jersey,布布扣,bubuko.com

时间: 2024-10-24 09:45:02

Spring Boot + Jersey的相关文章

Spring Boot + Jersey发生FileNotFoundException (No such file or directory)

我在使用Spring Boot + Jersey 项目,解决了上一篇随笔中的FileNotFoundException,然后又报了一个FileNotFoundException,不过报错信息不一样了 报错信息如下: ERROR o.a.c.c.C.[Tomcat].[localhost].[/] - StandardWrapper.Throwable org.glassfish.hk2.api.MultiException: A MultiException has 1 exceptions.

spring boot + jersey工程由jar包转为war包在tomcat中启动报错问题

第一步: 在maven下,将Spring Boot工程由jar转换为war包启动,很简单,将pom.xml文件中的packaging改为war <packaging>war</packaging> 如果你使用Gradle,你需要修改build.gradle来将war插件应用到项目上: apply plugin: 'war'第二步: 产生一个可部署war包的第一步是提供一个SpringBootServletInitializer子类,并覆盖它的configure方法.这充分利用了Sp

Spring Boot通过命令行启动发生FileNotFoundException

Spring Boot + Jersey 通过命令行启动会发生错误FileNotFoundException异常 异常信息如下: ERROR o.a.c.c.C.[Tomcat].[localhost].[/] - StandardWrapper.Throwable org.glassfish.jersey.internal.ServiceConfigurationError: org.glassfish.jersey.internal.spi.AutoDiscoverable: : java.

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

最近公司内部系统要做数据对接,故使用 jersey 来做 restful webservice 接口设计.由于 spring boot 已经集成 jersey,估计直接导入 spring-boot-starter-jersey 就好了. 在测试时候除了遇到中文乱码之外花费了比较长的时间,其余暂时没遇到大的问题.然而发布的时候发现了一个坑. public class JerseyConfig extends ResourceConfig { public JerseyConfig(){ //reg

玩转spring boot——properties配置

前言 在以往的java开发中,程序员最怕大量的配置,是因为配置一多就不好统一管理,经常出现找不到配置的情况.而项目中,从开发测试环境到生产环境,往往需要切换不同的配置,如测试数据库连接换成生产数据库连接,若有一处配错或遗漏,就会带来不可挽回的损失.正因为这样,spring boot给出了非常理想的解决方案——application.properties.见application-properties的官方文档:http://docs.spring.io/spring-boot/docs/curr

Spring Boot 添加jersey-mvc-freemarker依赖后内置tomcat启动不了解决方案

我在我的Spring Boot 项目的pom.xml中添加了jersey-mvc-freemarker依赖后,内置tomcat启动不了. 报错信息如下: org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.boot.context.embedded.EmbeddedServletCon

Spring Boot Starter 的基本封装

1)spring-boot-starter这是Spring Boot的核心启动器,包含了自动配置.日志和YAML. 2)spring-boot-starter-amqp通过spring-rabbit来支持AMQP协议(Advanced Message Queuing Protocol). 3)spring-boot-starter-aop支持面向方面的编程即AOP,包括spring-aop和AspectJ. 4)spring-boot-starter-artemis通过Apache Artemi

Spring Boot特性(转)

摘要: 1. SpringApplication SpringApplication 类是启动 Spring Boot 应用的入口类,你可以创建一个包含 main() 方法的类,来运行 SpringApplication.run 这个静态方法: public static void main(String... 1. SpringApplication SpringApplication 类是启动 Spring Boot 应用的入口类,你可以创建一个包含 main() 方法的类,来运行 Spri

Spring boot配置文件application.properties

# =================================================================== # COMMON SPRING BOOT PROPERTIES # # This sample file is provided as a guideline. Do NOT copy it in its # entirety to your own application.               ^^^ # =====================