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

来源:互联网 发布:怎样在淘宝联盟买东西 编辑:程序博客网 时间:2024/05/21 11:11

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.resteasy</groupId><artifactId>resteasy-jaxrs</artifactId><version>${resteasy.version}</version></dependency><dependency><groupId>org.jboss.resteasy</groupId><artifactId>resteasy-jaxb-provider</artifactId><version>${resteasy.version}</version></dependency>

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

<dependency><groupId>org.jboss.resteasy</groupId><artifactId>resteasy-servlet-initializer</artifactId><version>${resteasy.version}</version></dependency>

跟spring集成,还需要spring的包

 <dependency>            <groupId>org.jboss.resteasy</groupId>            <artifactId>resteasy-spring</artifactId>            <version>${resteasy.version}</version> </dependency>

还有一些解析json之类的包

<dependency>            <groupId>org.jboss.resteasy</groupId>            <artifactId>resteasy-jackson2-provider</artifactId>            <version>${resteasy.version}</version> </dependency>

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

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

Spring Boot集成

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

  • 引入包

    <dependency><groupId>com.paypal.springboot</groupId><artifactId>resteasy-spring-boot-starter</artifactId><version>2.3.0-RELEASE</version></dependency><!--PS,上面的那一堆包不用引了,这个就帮我们引入了-->
  • 引入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<Boolean> getCity(@PathParam("id") Long id) {      return new Result<>();  }}

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

原创粉丝点击