Kotlin Spring Boot form-urlencoded POST请求带有Map

时间:2017-12-02 05:35:13

标签: spring-boot kotlin

我刚刚开始使用Kotlin和Spring Boot,并决定编写一个简单的端点,它接受一个form-urlencoded POST请求。我不想为正文编写实际的数据类,所以我试图只为身体使用Map,希望我只能访问键/值对。我第一次尝试:

@RestController
class MyController {

    @RequestMapping(value = "/endpoint", method = arrayOf(RequestMethod.POST),
            consumes = arrayOf("application/x-www-form-urlencoded"))
    fun myEndpoint(@RequestBody body: Map<String,String>): String {

        // Do stuff
    }
}

但是这导致了415关于不支持的媒体类型的错误...我读到这是因为使用了@RequestBody和form-urlencoded POST。我随后尝试使用@ModelAttribute但后来接收了

  

无法实例化[java.util.Map]:指定的类是一个接口

因为我完全被黑客攻击而不足为奇。我也试过没有任何注释的身体,但没有注入任何形式参数。我知道我可以添加一个数据类来解决这个问题,但是我想知道是否可以使用Map来完成这一点,因为我之前在Java中做过类似的事情。

感谢。

1 个答案:

答案 0 :(得分:2)

您需要使用body

@RequestParam参数添加注释
    @RequestMapping(value = "/endpoint", method = [(RequestMethod.POST)],
                    consumes = [MediaType.APPLICATION_FORM_URLENCODED_VALUE])
    fun myEndpoint(@RequestParam body: Map<String,String>): String {

        return //...
    }

(另请注意,我删除了arrayOf调用以支持数组文字,这些文字可用于Kotlin 1.2中的注释。