Spring Boot Rest控制器端点不起作用

时间:2020-03-15 20:18:46

标签: java spring spring-boot rest

使用val input = List('a','b','a') (0 to input.length).flatMap(input.combinations) //res0: IndexedSeq[List[Char]] = // Vector(List(), List(a), List(b), List(a, a), List(a, b), List(a, a, b)) 创建一个简单的Spring Boot应用程序。我给了一个带有Maven注释的值,但是它不起作用。如果我不使用RestController的值,它将起作用。我想知道,为什么它不起作用?RestController中值的用途是什么?

@RestController这会导致错误

http://localhost:9090/app/hello可以正常工作

http://localhost:9090/hello@RestController("/app")批注中"/app"的用途是什么?

P.S:我知道,我可以在ScraperResource类上使用@RestController

@RequestMapping("/app")
@SpringBootApplication
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

application.properties

@RestController("/app")
public class ScraperResource {
    @GetMapping("hello")
    public String testController() {
        return "Hello";
    }
}

2 个答案:

答案 0 :(得分:3)

这是因为RestController内部的“ / app”与您的URL映射无关,而与内部使用的“逻辑组件”名称无关

如果要为所有控制器方法添加/ app前缀(或不添加它),则应改用此方法。

@RestController
@RequestMapping("/app")
public class ScraperResource {

    @GetMapping("hello")
    public String testController() {
        return "Hello";
    }
}

没有@RestController的情况下,Spring不会知道此类应处理HTTP调用,因此它是必需的注释。

答案 1 :(得分:1)

根据与@RestController批注关联的Java文档,这就是您要传递给它的值的含义:

/**
     * The value may indicate a suggestion for a logical component name,
     * to be turned into a Spring bean in case of an autodetected component.
     * @return the suggested component name, if any (or empty String otherwise)
     * @since 4.0.1
     */
    @AliasFor(annotation = Controller.class)
    String value() default "";

因此,它不会影响或影响可以使用端点访问的URL。如果要添加顶级映射,则可以按照您提到的在类级别使用@RequestMapping("/app")