在 Spring 引导应用程序中使用 JAX-RS REST API 作为库
Using JAX-RS REST API as a library in a Spring Boot application
我正在开发一个 Spring 数字签名启动项目,我想在其中使用经典 Spring Web 语法创建一些 REST 控制器(@RestController
,@XMapping
, ETC。)。寻找一些库来执行我发现的签名工作 this one,其中包括使用 JAX-RS 规范制作的工作 REST 控制器。所以我认为只要在我的应用程序中公开它们就可以用尽可能少的代码完成工作。最初我想自己创建控制器并将工作委托给 lib,但是当我发现这些已经存在的控制器时,我认为我什至可以跳过它并保持代码非常小。
我通过添加 org.springframework.boot:spring-boot-starter-jersey
依赖项并在 Jersey 的 ResourceConfig
中注册它们成功地做到了这一点。但我认为这可能与 org.springframework.boot:spring-boot-starter-web
and/or org.springframework.boot:spring-boot-starter-data-rest
不兼容,因为一旦来自 lib 的 JAX-RS API 变得可调用,data-rest
自动创建从@Repository
类消失。
我一直在寻找一种在 Spring Boot 中将这两个东西集成在一起的方法,但我不确定这是否可行,或者是一个好主意。老实说,我真的不介意使用 JAX-RS 规范对我的控制器进行编码,我过去使用过它并且我也喜欢它。我不想失去的是 @Repository
类 控制器的自动创建,spring-data-rest
确实如此,因为我真的很喜欢这个功能。
我是在尝试一些非常愚蠢的事情,还是有什么办法可以做到这一点?
您可以在同一类型中使用 Jersey 和 Spring MVC,但您需要配置 Jersey 以允许您这样做。
首先,应将 Jersey 配置为用作过滤器而不是 servlet。为此,请在 application.properties
文件中将 spring.jersey.type
设置为 filter
。
其次,必须将 Jersey 配置为转发它无法自行处理的请求。这允许请求到达 Spring MVC 的 DispatcherServlet
,从那里它将被分派到您的 Spring MVC 控制器、Spring 数据 REST 端点等。为此,设置FILTER_FORWARD_ON_404
属性 在你的 ResourceConfig
:
@Component
public class JerseyConfig extends ResourceConfig {
public JerseyConfig() {
// Endpoint registrations
property(ServletProperties.FILTER_FORWARD_ON_404, true);
}
}
我正在开发一个 Spring 数字签名启动项目,我想在其中使用经典 Spring Web 语法创建一些 REST 控制器(@RestController
,@XMapping
, ETC。)。寻找一些库来执行我发现的签名工作 this one,其中包括使用 JAX-RS 规范制作的工作 REST 控制器。所以我认为只要在我的应用程序中公开它们就可以用尽可能少的代码完成工作。最初我想自己创建控制器并将工作委托给 lib,但是当我发现这些已经存在的控制器时,我认为我什至可以跳过它并保持代码非常小。
我通过添加 org.springframework.boot:spring-boot-starter-jersey
依赖项并在 Jersey 的 ResourceConfig
中注册它们成功地做到了这一点。但我认为这可能与 org.springframework.boot:spring-boot-starter-web
and/or org.springframework.boot:spring-boot-starter-data-rest
不兼容,因为一旦来自 lib 的 JAX-RS API 变得可调用,data-rest
自动创建从@Repository
类消失。
我一直在寻找一种在 Spring Boot 中将这两个东西集成在一起的方法,但我不确定这是否可行,或者是一个好主意。老实说,我真的不介意使用 JAX-RS 规范对我的控制器进行编码,我过去使用过它并且我也喜欢它。我不想失去的是 @Repository
类 控制器的自动创建,spring-data-rest
确实如此,因为我真的很喜欢这个功能。
我是在尝试一些非常愚蠢的事情,还是有什么办法可以做到这一点?
您可以在同一类型中使用 Jersey 和 Spring MVC,但您需要配置 Jersey 以允许您这样做。
首先,应将 Jersey 配置为用作过滤器而不是 servlet。为此,请在 application.properties
文件中将 spring.jersey.type
设置为 filter
。
其次,必须将 Jersey 配置为转发它无法自行处理的请求。这允许请求到达 Spring MVC 的 DispatcherServlet
,从那里它将被分派到您的 Spring MVC 控制器、Spring 数据 REST 端点等。为此,设置FILTER_FORWARD_ON_404
属性 在你的 ResourceConfig
:
@Component
public class JerseyConfig extends ResourceConfig {
public JerseyConfig() {
// Endpoint registrations
property(ServletProperties.FILTER_FORWARD_ON_404, true);
}
}