You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 08:22:50