zoukankan      html  css  js  c++  java
  • Spring Boot + Jersey

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


    须要注意的是Jersey本身自带了hk2这样一个DI库,所以,在结合Spring Boot使用的时候,是比較easy搞混淆的。简单的讲,你应该分清楚,哪一部分是由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"}



    博客完毕的比較仓促,假设有描写叙述错误或者不准确的地方。欢迎指出来。

  • 相关阅读:
    CREATE AGGREGATE
    技术文档列表
    jQuery 判断表单中多个 input text 中至少有一个不为空
    Java实现 蓝桥杯 算法提高 奥运会开幕式
    Java实现 蓝桥杯 算法提高 最长滑雪道
    Java实现 蓝桥杯 算法提高 最长滑雪道
    Java实现 蓝桥杯 算法提高 最长滑雪道
    Java实现 蓝桥杯 算法提高 最大值路径
    Java实现 蓝桥杯 算法提高 最大值路径
    Java实现 蓝桥杯 算法提高 最大值路径
  • 原文地址:https://www.cnblogs.com/llguanli/p/7152259.html
Copyright © 2011-2022 走看看