Spring Boot 集成 resteasy篇 — jax-rs初步介绍和spring boot集成

Spring Boot 集成 resteasy篇 — jax-rs初步介绍和spring boot集成

JAX-RS 是代表restful web service的一套规范API,JAX-RS规范基于JAVA编程语言,它是用来创建Restful 风格的web services服务的。Jax-rs使用一系列注解来简化java开发。

JAX-RS也称jsr339 (全称java specifications requests java规范提案第339个),由jcp(java community process)组织经过投票通过。

为了加深对jsr的理解,举一个简单的例子,jsr 330标准就是依赖注入的提案,已经通过。

规范说明

规范定义了一些常见的注解(见下表),用来标注一种资源文件为restfun风格的资源文件

序号 注解 描述
1 @Path 类或者方法的相对地址,标注在类或者方法上
2 @GET HTTP GET请求用,用来获取资源
3 @PUT HTTP PUT 请求,用来创建资源
4 @POST HTTP POST 请求, 用来创建或者更新资源
5 @DELETE HTTP DELETE请求, 用来删除资源
6 @HEAD HTTP HEAD请求, 用来获取一个接口是否可用的状态
7 @Produces 返回数据的格式比如APPLICATION/XML, TEXT/HTML, APPLICATION/JSON
8 @Consumes 请求数据格式 , 如json
9 @PathParam 绑定url里面的参数
10 @QueryParam 绑定url后面的参数(?后面的)
11 @MatrixParam 绑定包含多个 property (属性)=value(值) 方法参数表达式
12 @HeaderParam 给header里面传参
13 @CookieParam 给cookie里面传参
14 @FormParam 给form传参
15 @DefaultValue 给参数一个默认值
16 @Context 可以注入HttpRequest,HttpResponse用

规范实现

下文将以resteasy为例

包引入

<dependency>
<groupId>org.jboss.resteasygroupId>
<artifactId>resteasy-jaxrsartifactId>
<version>${resteasy.version}version>
dependency>
<dependency>
<groupId>org.jboss.resteasygroupId>
<artifactId>resteasy-jaxb-providerartifactId>
<version>${resteasy.version}version>
dependency>

resteasy使用ServletContainerInitializer 接口来初始化项目,如果要开启启动扫描,扫描providers和resources。还需要引入另外一个包。

<dependency>
<groupId>org.jboss.resteasygroupId>
<artifactId>resteasy-servlet-initializerartifactId>
<version>${resteasy.version}version>
dependency>

跟spring集成,还需要spring的包

 <dependency>
            <groupId>org.jboss.resteasygroupId>
            <artifactId>resteasy-springartifactId>
            <version>${resteasy.version}version>
 dependency>

还有一些解析json之类的包

<dependency>
            <groupId>org.jboss.resteasygroupId>
            <artifactId>resteasy-jackson2-providerartifactId>
            <version>${resteasy.version}version>
 dependency>

resteasy根据servlet容器的不同,还有些不同,这里讲的是spring boot继承,不过多赘述,详细见这里 , 尽管引了这些包,项目也没有和spring boot集成起来,因为项目不能autoconfigure,还有servlet也没有配置的地方。

这里我提供一个思路,实现 BeanFactoryPostProcessor接口 ,在postProcessBeanFactory 去创建servlet

Spring Boot集成

另外我提供一种比较简单的方法,直接使用开源集成,这里使用的是paypal开源的一个集成方案。

  • 引入包

    <dependency>
    <groupId>com.paypal.springbootgroupId>
    <artifactId>resteasy-spring-boot-starterartifactId>
    <version>2.3.0-RELEASEversion>
    dependency>
    
  • 引入spring boot的一堆包

用法

  • 指定servletMapping路径

    写一个类继承Application,然后交给spring管理

    @Component
    @ApplicationPath("/v1/")
    public class ApplicationPathImpl extends Application {
    
    }

  • 编写restful接口啦

    @Component
    @Path("province/")
    public class ExternalFacadeImpl implements ExternalFacade {
    
      /**
       * http://localhost:8080/v1/province/city/1
       * @param id
       * @return
       */
      @Path("city/{id}")
      @GET
      @Produces(MediaType.APPLICATION_JSON)
      @Consumes(MediaType.APPLICATION_JSON)
      @Override
      public Result getCity(@PathParam("id") Long id) {
          return new Result<>();
      }
    }

下一篇将介绍常用注解作用

你可能感兴趣的:(restful,Spring,Boot集成resteasy)