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中做过类似的事情。

谢谢。

One Solution collect form web for “Kotlin Spring Boot使用Map创建urlencoded POST请求”

你需要用@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的注释)

  • 如何避免返回SAM接口的函数的对象expression式
  • Kotlin和jvm:对象OR类实例?
  • 如何启动Kotlin中的字符串数组?
  • Kotlin的“@Parcelize”是否适用于非数据类?
  • 带有Kotlin错误的libGDX“org.jetbrains.kotlin.kapt.idea.KaptModelBuilderService”
  • Kotlin并发性:任何在Lock中运行代码的标准函数?
  • 如何在Kotlin类构造函数体中使用自定义setter
  • 任何方式在Kotlin中从相同的通用接口inheritance两次(使用单独的types)?
  • Android,Gradle,Realm,Kotlin:错误:错误:找不到AndroidManifest.xml文件
  • Lint认为Kotlin MutableMap.forEach()是java.util.Map.forEach()
  • 什么?在Kotlin做什么?
  • Kotlin language will be the best programming language for Android.