0

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

我通过添加org.springframework.boot:spring-boot-starter-jersey依赖项并将它们注册到 Jersey 的ResourceConfig. 但我认为这可能与org.springframework.boot:spring-boot-starter-web和/或不兼容,org.springframework.boot:spring-boot-starter-data-rest因为一旦库中的 JAX-RS API 变得可调用,data-rest从类自动创建的端点就@Repository消失了。

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

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

4

1 回答 1

2

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

首先,Jersey 应该被配置为一个过滤器而不是一个 servlet。为此,请在您的文件中设置spring.jersey.type为。filterapplication.properties

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

@Component
public class JerseyConfig extends ResourceConfig {
    
    public JerseyConfig() {
        // Endpoint registrations
        property(ServletProperties.FILTER_FORWARD_ON_404, true);
    }

}
于 2021-07-08T08:59:07.347 回答