我正在尝试在Mac上运行一个简单的spring boot应用程序。
我正在使用以下
端口:8080还尝试了8085、8081
邮递员中:http://localhost:8080/root/sayHi GET-请求
但是结果是我出错了。我在Windows上执行了相同的示例,但是可以正常工作
请让我知道如何解决此错误
代码
@SpringBootApplication
@RestController
@RequestMapping("/root")
class Demo2Application
fun main(args: Array<String>) {
runApplication<Demo2Application>(*args)
}
@RequestMapping("/sayHi", method = arrayOf(RequestMethod.GET))
@ResponseBody
fun sayHi() : String {
return "..hi"
}
答案 0 :(得分:0)
您可以尝试将主类与控制器类分开吗? Spring Boot遵循MVC架构,最好将逻辑与主类分开。在主类本身中使用@Controller
注释等可能无法正常工作。
@SpringBootApplication
class Demo2Application {
fun main(args: Array<String>) {
runApplication<Demo2Application>(*args)
}
}
@RestController
@RequestMapping("/root")
class HelloRestController {
@GetMapping("/sayHi") // or @RequestMapping(value= "/sayHi", method = RequestMethod.GET)
fun sayHi() : String {
return "..hi"
}
}
答案 1 :(得分:0)
@RequestMapping
方法必须在@RestController
类中-春季扫描@Controller
类,然后它正在寻找该类的所有@RequestMapping
方法。但是您的课程在开始的同一行结束(因为缺少大括号{}告诉类主体在哪里)。
要解决您的问题,您需要将@RequestMapping
函数移至main函数之前,将类主体移至fun sayHi
之前,然后在其之后关闭:
@SpringBootApplication
@RestController
@RequestMapping("/root")
class Demo2Application { // ******* this opens class body ********
@RequestMapping("/sayHi", method = arrayOf(RequestMethod.GET))
@ResponseBody
fun sayHi() : String {
return "..hi"
}
} // ******* this closes class body *********
fun main(args: Array<String>) {
runApplication<Demo2Application>(*args)
}
当您将函数放在kotlin的类主体中时-与类主体中的java方法相同。但是,当您直接将函数放在文件中(类主体之外)时,它类似于Java中的静态方法。此外,来自kotlin的这些静态方法-在JVM中将出现在不同的类中:FileNameKt
(例如,对于文件demo.kt
,您的函数sayHi()
在JVM中将以静态方法DemoKt.sayHi()
出现,不是Demo2Application
实例方法的成员