我刚刚开始使用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中做过类似的事情。
感谢。
答案 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中的注释。