我想创建一个Spring服务,该服务将根据http://localhost/version
上的GET请求返回文本。
为此,我写了this code:
@Controller
@RequestMapping("/version")
class VersionController {
@RequestMapping(method=arrayOf(RequestMethod.GET))
fun version():String {
return "1.0"
}
}
@Configuration
open class SecurityConfiguration : WebSecurityConfigurerAdapter() {
override fun configure(http:HttpSecurity) {
http
.authorizeRequests()
.antMatchers("/version").permitAll()
.anyRequest().authenticated()
.and()
.csrf()
.csrfTokenRepository(CookieCsrfTokenRepository
.withHttpOnlyFalse());
}
}
@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响应。
为什么?我需要更改代码的哪一部分?
答案 0 :(得分:1)
虽然我从未使用过kotlin,但我可以说一般来说,有很多原因可以在这里获得404,仅举几例:
您具有某种上下文路径,因此所有端点都将出现在此上下文路径下,例如http://localhost:8080/my-app/version
未找到您的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
之后,此代码开始工作。