Spring服务器没有响应GET请求

时间:2018-06-26 19:20:01

标签: java spring kotlin spring-web

我想创建一个Spring服务,该服务将根据http://localhost/version上的GET请求返回文本。

为此,我写了this code

Controller

@Controller
@RequestMapping("/version")
class VersionController {
  @RequestMapping(method=arrayOf(RequestMethod.GET))
  fun version():String {
      return "1.0"
  }
}

Security configuration

@Configuration
open class SecurityConfiguration : WebSecurityConfigurerAdapter() {
  override fun configure(http:HttpSecurity) {
   http
                .authorizeRequests()
                .antMatchers("/version").permitAll()
                .anyRequest().authenticated()
                .and()
                .csrf()
                .csrfTokenRepository(CookieCsrfTokenRepository
                        .withHttpOnlyFalse());
  }
}

App

@SpringBootApplication
open class App {
  fun run() {
      SpringApplication.run(App::class.java)
  }
}

fun main(args: Array<String>) {
  App().run()
}

编译(mvn compile),运行(mvn exec:java -Dexec.mainClass=test.AppKt)并尝试访问http://localhost:8080/version)时,我得到404响应。

为什么?我需要更改代码的哪一部分?

3 个答案:

答案 0 :(得分:1)

虽然我从未使用过kotlin,但我可以说一般来说,有很多原因可以在这里获得404,仅举几例:

  1. 您具有某种上下文路径,因此所有端点都将出现在此上下文路径下,例如http://localhost:8080/my-app/version

  2. 未找到您的rest控制器(我在@Configuration类中没有看到它,所以它取决于您放置它的位置(相对于spring boot应用程序)

无论如何,我建议使用Spring Boot执行器项目(只需在构建工具中添加依赖项)。 如果已插入,则可以查看Spring Boot应用程序找到的所有映射(请参阅“映射”端点): https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html

您可以做的另一件事是在 版本控制器,并放置一个断点/日志,只是为了确保它完全被Spring Boot引擎加载。

另一种选择是查看spring boot应用程序的启动日志-它应该通知您有关已注册的rest控制器及其路径的信息。

答案 1 :(得分:0)

为什么要使用“(method = arrayOf(RequestMethod.GET))”? 尝试使用“(方法= RequestMethod.GET)”,它应该工作。 您可以在方法本身上使用@GET注释

答案 2 :(得分:0)

在我将@RestController注释添加到VersionController之后,此代码开始工作。