问题描述
我正在开发一个用于数字签名的 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