在 Spring Boot 应用程序中使用 JAX-RS REST API 作为库

问题描述

我正在开发一个用于数字签名的 Spring Boot 项目,我想在其中使用经典的 Spring Web 语法(@RestController@XMapping 等)创建一些 REST 控制器。寻找一些库来执行我发现的签名工作 this one,其中包括使用 JAX-RS 规范制作的工作 REST 控制器。所以我认为简单地在我的应用程序中公开它们可以用最少的代码完成工作。最初我想自己创建控制器并将工作委托给库,但是当我发现这些已经存在的控制器时,我想我什至可以跳过它并保持代码很小。

通过添加 org.springframework.boot:spring-boot-starter-jersey 依赖项并在 Jersey 的 ResourceConfig注册它们,我成功地做到了这一点。但我认为这可能与 org.springframework.boot:spring-boot-starter-web 和/或 org.springframework.boot:spring-boot-starter-data-rest 不兼容,因为一旦 lib 中的 JAX-RS API 变得可调用data-rest自动从 { {1}} 个课程消失了。

我一直在寻找一种方法将这两个东西集成到 Spring Boot 中,我不确定这是否可能,或者是一个好主意。老实说,我真的不介意用 JAX-RS 规范编写我的控制器,我过去用过它,我也喜欢它。我不想失去的是为 @Repository自动创建控制器的功能@Repository 确实如此,因为我非常喜欢该功能

我是在尝试一些非常愚蠢的事情,还是有什么办法可以做到这一点?

解决方法

您可以使用相同类型的 Jersey 和 Spring MVC,但您需要配置 Jersey 以允许您这样做。

首先,应将 Jersey 配置为用作过滤器而不是 servlet。为此,请在您的 spring.jersey.type 文件中将 filter 设置为 application.properties

其次,Jersey 必须配置为转发它自己无法处理的请求。这允许请求到达 Spring MVC 的 DispatcherServlet,从那里它将被分派到您的 Spring MVC 控制器、Spring Data REST 端点等。为此,请在您的 {{1} 中设置 FILTER_FORWARD_ON_404 属性}:

ResourceConfig