SpringBoot中Jersey的配置与相关注解

1、Jersey的配置应用

要使用@Path和@POST组合来组成前端访问后端的路径,就必须要实现Jersey的配置。

  • 导入依赖
<!-- java.ws.rs是JAX-RS规范中定义的包名 -->
<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>javax.ws.rs-api</artifactId>
    <version>2.0.1</version>
</dependency>
<!-- Jersey依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jersey</artifactId>
</dependency>
  • yml文件添加自定义端口号和项目路径(如果不添加的话port默认为8080,context-path的默认值为“/”)
server:
  # 项目端口
  port: 8081
  # 项目路径
  servlet:
    context-path: /myspringboot
  • 注册jersey servlet

    所有 rest/* 的请求都将被 ServletContainer jersey servlet 容器接管。

@Configuration
public class JerseyConfig {
    @Bean
    public ServletRegistrationBean jerseyServlet() {
        // 手动注册servlet
        ServletRegistrationBean registrationBean = new ServletRegistrationBean(new ServletContainer(), "/rest/*");
        registrationBean.addInitParameter(ServletProperties.JAXRS_APPLICATION_CLASS,JerseyResourceConfig.class.getName());
        return registrationBean;
    }
}
  • 创建Jersey Resources
public class JerseyResourceConfig extends ResourceConfig {
    public JerseyResourceConfig() {
        // 包扫描
        packages("com.example.demo.controller");
        // 注册json工具
        register(JacksonFeature.class);
        // 注册自定义异常配置
        register(TestExceptionMapper.class);
    }
}
  • 编写controller
@Path("/")
@Controller
public class JerseyTestController {

    @GET
    @Path("/test")
    public String test() {
        return "Hello Jersey";
    }
}
  • 在浏览器输入URL:http://localhost:8081/myspringboot/rest/test

    浏览器便能访问到后端,并且显示字符串"Hello Jersey"。

2、Jersey和JAX-RS

  • JAX-RS

    JAX-RS是JAVA EE6 引入的一个新技术。 JAX-RS即Java API for RESTful Web Services,是一个Java 编程语言的应用程序接口,支持按照表述性状态转移(REST)架构风格创建Web服务。JAX-RS使用了Java SE5引入的Java注解来简化Web服务的客户端和服务端的开发和部署。

  • Jersey

    Jersey RESTful WebService框架是一个开源的、产品级别的JAVA框架,支持JAX-RS API并且是一个JAX-RS(JSR 311&JSR 339)的参考实现。Jersey不仅仅是一个JAX-RS的参考实现,Jersey提供自己的API,其API继承自JAX-RS,提供更多的特性和功能以进一步简化RESTful service和客户端的开发。

    Jersey 1.x 使用的是sun的com.sun.jersey

    Jersey 2.x 使用的是glassfish的org.glassfish.jersey

  • Jersey与JAX-RS的关系

    JAX-RS是java自己的一个小的框架,实现了restful风格,只不过功能不是很强大;而Jersey呢,它是一个比较成熟的restful框架了,它在设计的时候,是基于JAX-RS的,它使用了java的JAX-RS的一些注解,当然了,他也有自己的特有注解,以及其他更强大的功能。

3、JAX-RS注解

  • 第一类

    @Path:标注资源类或者方法的相对路径,client通过这个路径访问资源

  • 第二类

    @GET:标注http请求的类型是查询请求

    @POST:标注http请求的类型是插入请求

    @PUT:标注http请求的类型是更新请求

    @DELETE:标注http请求的类型是删除请求

  • 第三类

    @Produces:标注返回的MIME媒体类型

    @Consumes:标注可接受请求的MIME媒体类型

  • 第四类

    @PathParam:写在方法的参数中,获得请求路径参数。比如:@PathParam(“username”) String userName

    @QueryParam:写在方法的参数中,获得请求路径附带的参数。比如:@QueryParam(“desc”) String desc

    @FormParam:form传递的参数,接受form传递过来的参数。比如:@FormParam(“name”) String userName

    @BeanParam:通过Bean的形式传递参数,接受client传递的bean类型的参数,同时这个bean可以在属性上配置@FormParam用以解决client的属性名称和bean的属性名称不一致的问题。比如:@BeanParam User user

    @HeaderParam:标注方法参数来自http请求的headers

    @CookieParam:标注方法参数来自http请求的cookie

  • 第五类

    @Context:写在方法的参数中,获得一些系统环境信息,通过@Context可以获得以下信息:UriInfo、ServletConfig、ServletContext、HttpServletRequest、HttpServletResponse和HttpHeaders等

4、ExceptionMapper< E extends Throwable >介绍

对于项目中自定义的异常,前端是不会返回任何异常/错误信息的,如http 500报错信息。这时就需要在jersey中进行配置。

public class TestExceptionMapper implements ExceptionMapper<TestException> {
 @Override
 public Response toResponse(TestException exception) {
     int responseCode =505;
     String errorMsg = "xxx报错";
     return Response.status(responseCode).header("reason", exception.getMessage())
             .entity(errorMsg).type(MediaType.APPLICATION_JSON).build();
 }
}

代码中TestException是自定义异常,如果它产生了异常,就会报505错误。

然后将TestExceptionMapper通过register方法手工注册到jersey容器中。

public class JerseyResourceConfig extends ResourceConfig {
 public JerseyResourceConfig() {
     // 包扫描
     packages("com.example.demo.controller");
     // 注册自定义异常配置
     register(TestExceptionMapper.class);
 }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值