企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
### 27.2 JAX-RS和Jersey 如果你更喜欢JAX-RS为REST端点提供的编程模型,可以使用相应的实现代替Spring MVC。如果将Jersey 1.x和Apache CXF的`Servlet`或`Filter`注册到应用上下文中,那它们可以很好的工作。Spring对Jersey 2.x有一些原生支持,所以在Spring Boot中也为它提供了自动配置及一个starter。 想要使用Jersey 2.x,只需添加`spring-boot-starter-jersey`依赖,然后创建一个`ResourceConfig`类型的`@Bean`,用于注册所有的端点(endpoints): ```java @Component public class JerseyConfig extends ResourceConfig { public JerseyConfig() { register(Endpoint.class); } } ``` 你也可以注册任意数量的,实现`ResourceConfigCustomizer`的beans来进一步自定义。 所有注册的端点都需注解`@Components`和HTTP资源annotations(比如`@GET`): ```java @Component @Path("/hello") public class Endpoint { @GET public String message() { return "Hello"; } } ``` 由于`Endpoint`是一个Spring组件(`@Component`),所以它的生命周期受Spring管理,你可以使用`@Autowired`添加依赖,也可以使用`@Value`注入外部配置。Jersey的servlet会被注册,并默认映射到`/*`,你可以将`@ApplicationPath`添加到`ResourceConfig`来改变该映射。 默认情况下,Jersey将以Servlet的形式注册为一个`ServletRegistrationBean`类型的`@Bean`,name为`jerseyServletRegistration`,该servlet默认会延迟初始化,不过可以通过`spring.jersey.servlet.load-on-startup`自定义。通过创建相同name的bean,你可以禁用或覆盖框架默认产生的bean。设置`spring.jersey.type=filter`可以使用Filter的形式代替Servlet,相应的`@Bean`类型变为`jerseyFilterRegistration`,该filter有一个`@Order`属性,你可以通过`spring.jersey.filter.order`设置。Servlet和Filter注册时都可以使用`spring.jersey.init.*`定义一个属性集合传递给init参数。 这里有一个[Jersey示例](http://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-jersey),你可以查看如何设置相关事项。