@RequestMapping不适用于GET请求

时间:2019-07-15 17:33:24

标签: spring spring-boot kotlin spring-annotations

我正在尝试在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"
}

2 个答案:

答案 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实例方法的成员