问题描述:
在使用@RequestBody MultiValueMap params进行接收前端传递过来的参数时,如果content-type为x-www-form-urlencoded时后台报 400:
Resolved exception caused by handler execution: org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public void com.dy.activiti.activitidemo.controller.ModelSaveRestResource.saveModel(java.lang.String,org.springframework.util.MultiValueMap<java.lang.String, java.lang.String>)
但是content-type为application/json时,又报:415 json格式不支持“
解决方案:
通过跟踪源码,发现@RequestBody的参数解析器为: org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor该方法中的resolveArgument不支持MultiValueMap类型的。
可以将@RequestBody换成@RequestParam。@RequestParam的解析器是RequestParamMapMethodArgumentResolver,支持MultiValueMap。
神奇的地方:第二天再试的时候@RequestBody又可以了。