Jax-rs 注释路径在 java spring 引导中不起作用?

Jax-rs annotation Path is not work in java spring boot?

我有 spring 引导应用程序,起始版本为 2.1.16,并且 spring-boot-starter-web 依赖项。所以,我想使用 javax.ws.rs-api 库,并添加依赖项:

 <dependency>
     <groupId>javax.ws.rs</groupId>
     <artifactId>javax.ws.rs-api</artifactId>
     <version>2.1.1</version>
 </dependency>

因此,当我创建控制器并添加@Path、@Get - 我没有从服务器得到答案(404 未找到)。它是如何工作的?

package com.example.test;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.ext.Provider;

@RestController
public class MyController {

    //Doesn't work (404 not found
    @GET
    @Path("/my_test")
    public String check() {
        return "hi!";
    }

    //Work
    @RequestMapping("/my_test2")
    public String check2() {
        return "hi2!";
    }
}

在你的pom.xml

中添加以下依赖
   <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jersey</artifactId>
        </dependency>
    </dependencies>

如果您使用 spring 启动启动器版本 2.1.16,您通常会有一个父 pom,它也将定义上述依赖项的默认版本。

然后用包 javax.ws.rs.Path

中的 @Path("/") 替换 @RestController

现在它应该可以正常工作了。

请记住您的嵌入式服务器现在将是 jersey 而不是默认的 tomcat

编辑:同样从问题的作者那里发现,需要进行另一项更改才能注册 ResourceConfigofficial documentation.

中也对此进行了描述

除了上面的post,还需要添加配置class:

@Configuration
public class JerseyConfig {

    @Bean
    public ResourceConfig resourceConfig(MyController myController) {
        ResourceConfig config = new ResourceConfig();
        config.register(myController);
        return config;
    }
}