使用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";
}
}
答案 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")
。