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"}



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

  • 相关阅读:
    ASP.NET MVC框架(第四部分): 处理表单编辑和提交场景 【转】
    ASP.NET MVC框架 (第二部分): URL路径选择 【转】
    ASP.NET MVC框架(第三部分): 把ViewData从控制器传到视图 【转】
    SNS介绍
    测试代码在实际类的内部写还是外部写的思考
    敏捷开发:软件与文档
    TDD是开发方法还是开发方法学?
    命名空间元素的封装性
    个人感觉
    呜呜....可惜...呜呜,也谈谈测试驱动开发
  • 原文地址:https://www.cnblogs.com/llguanli/p/7152259.html
Copyright © 2011-2022 走看看