spring_reference/IV. Spring Boot features/26.2. JAX-RS and Jersey.md

30 lines
2.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

### 26.2. JAX-RS和Jersey
如果喜欢JAX-RS为REST端点提供的编程模型你可以使用可用的实现替代Spring MVC。如果在你的应用上下文中将Jersey 1.x和Apache Celtix的Servlet或Filter注册为一个@Bean那它们工作的相当好。Jersey 2.x有一些原生的Spring支持所以我们会在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);
}
}
```
所有注册的端点都应该被@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将在一个ServletRegistrationBean类型的@Bean中被设置成名称为jerseyServletRegistration的Servlet。通过创建自己的相同名称的bean你可以禁止或覆盖这个bean。你也可以通过设置`spring.jersey.type=filter`来使用一个Filter代替Servlet在这种情况下被覆盖或替换的@Bean是jerseyFilterRegistration。该servlet有@Order属性你可以通过`spring.jersey.filter.order`进行设置。不管是Servlet还是Filter注册都可以使用spring.jersey.init.*定义一个属性集合作为初始化参数传递过去。
这里有一个[Jersey示例](http://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-jersey),你可以查看如何设置相关事项。