Kotlin Spring Boot使用Map创建urlencoded POST请求

我刚开始玩Kotlin和Spring Boot,并决定编写一个简单的端点,它需要一个表单urlencode的POST请求。 我不想为身体写一个实际的数据类,所以我试图只使用一个地图为身体,希望我可以访问键/值对。 我第一次尝试:

@RestController class MyController { @RequestMapping(value = "/endpoint", method = arrayOf(RequestMethod.POST), consumes = arrayOf("application/x-www-form-urlencoded")) fun myEndpoint(@RequestBody body: Map): String { // Do stuff } } 

但是,这导致了关于不支持媒体types的415错误…我读的是由于使用@RequestBody和表单urlencoded POST。 我随后尝试使用@ModelAttribute,而不是接收

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

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

谢谢。

你需要用@RequestParam注解你的body参数

  @RequestMapping(value = "/endpoint", method = [(RequestMethod.POST)], consumes = [MediaType.APPLICATION_FORM_URLENCODED_VALUE]) fun myEndpoint(@RequestParam body: Map): String { return //... } 

(另外请注意,我删除了arrayOf调用,赞成数组文字,这些文字可用于Kotlin 1.2的注释)