@RequestParam Map <string,string =“”>在spring boot中将变量名称作为键打印

时间:2017-12-16 03:51:14

标签: java spring-mvc spring-boot

当我尝试在Spring启动时将Map作为RequestParam传递时,它会将变量名称作为键输出,将完整值作为字符串输出。任何人都可以帮助它为什么表现得很奇怪。我在下面的代码片段

@PostMapping(value = "/", produces = MediaType.ALL_VALUE)
public String testController(@RequestParam Map<String, String> parms) throws Exception {
    parms.forEach((k, v) -> System.out.println((k + ":" + v)));
    return "";
}

当我传递值

  

{&#34;密押&#34;:&#34;测试值&#34;}

它产生的是parms:{&#34; testkey&#34;:&#34; testvalue&#34;}

1 个答案:

答案 0 :(得分:1)

也许您想将http请求Body转换为地图,您应该在params上使用 @RequestBody 而不是@RequestParam。 RequestBody注释将http请求体转换为Object,而RequestParam注释将http param(URL参数或表单字段)解析为方法参数。

curl --request POST \
  --url http://localhost:9090 \
  --header 'Cache-Control: no-cache' \
  --header 'Content-Type: application/json' \
  --data '{"testkey":"testkey"}'

使用flow * nix命令

测试您的代码
POST  HTTP/1.1
Host: localhost:9090
Content-Type: application/json
Cache-Control: no-cache

{"testkey":"testkey"}

将发送以下http请求:

  <script src="{{asset('../videojs/videojs-dailymotion.js')}}"></script>
  <link href="{{asset('../video-js-4.12.14/video-js.css')}}" rel="stylesheet">
  <script src="{{asset('../video-js-4.12.14/video.js')}}"></script>
  <video id="vid1"
        class="video-js vjs-default-skin"
        controls
        preload="auto"
        width="640"
        height="360"
        data-setup='{ "techOrder": ["dailymotion"], "dmControls" : "1", "src": "http://www.dailymotion.com/video/xg3b7m_meetbuck_creation" }'>
 </video>