Kotlin Spring Boot发送POST请求返回405 Method Not Allowed问题
排查Spring Boot POST请求405 Method Not Allowed错误
在学习Kotlin结合Spring Boot的教程时,向http://localhost:8080/发送POST请求后收到405错误,响应内容如下:
{ "timestamp": "2023-01-09T05:35:30.982+00:00", "status": 405, "error": "Method Not Allowed", "path": "/" }
我的代码实现如下:
@SpringBootApplication class DemoApplication fun main(args: Array<String>) { runApplication<DemoApplication>(*args) } @RestController class MessageController(val service: MessageService) { @GetMapping("/") fun index(): List<Message> = service.findMessages() @PostMapping() fun post(@RequestBody message: Message) { service.save(message) } } data class Message(val id: String?, val text: String) @Service class MessageService(val db: JdbcTemplate) { fun findMessages(): List<Message> = db.query("select * from messages") { response, _ -> Message(response.getString("id"), response.getString("text")) } fun save(message: Message){ val id = message.id ?: UUID.randomUUID().toString() db.update("insert into messages values ( ?, ? )", id, message.text) } }
请求详情:
POST http://localhost:8080/ Content-Type: application/json { "text": "Hello!" }
错误原因
问题出在@PostMapping()注解上:当@PostMapping未指定路径参数时,不会自动映射到根路径/。当前@GetMapping("/")已将根路径的GET请求绑定到index()方法,但根路径没有对应的POST请求处理逻辑,因此Spring返回405(方法不允许)错误。
解决方法
修改MessageController中的@PostMapping()注解,显式指定路径为/,让POST请求也映射到根路径:
@RestController class MessageController(val service: MessageService) { @GetMapping("/") fun index(): List<Message> = service.findMessages() // 显式指定路径为/ @PostMapping("/") fun post(@RequestBody message: Message) { service.save(message) } }
修改后重启应用,再次发送POST请求到http://localhost:8080/,即可正常处理请求并将数据存入数据库。
内容的提问来源于stack exchange,提问作者RCH
相关产品推荐
相关产品推荐

