ajax POST提交的JSON对象为何不能被SpringMVC控制器赋给对应的类实例参数?

根据这篇文章, http://blog.csdn.net/lsy0903/...
我用ajax,如下

    $.ajax({
            url: "${ctx}/dict/add",
            type: "post",
            dataType: "json",
            contentType: "application/json",
            async: false,
            data: JSON.stringify(args),
            。。。
            。。。
            

args是一个json对象
然后在java后台用SpringMVC的controller接收

@RequestMapping(value = "add", method = RequestMethod.POST)
@ResponseBody
public String add(@RequestBody Dict dict){
    。。。
    。。。
    

不成功,我调试发现,HttpServerletRequest的对象里,getParameterMap()的结果都是空

clipboard.png

配置:

<mvc:annotation-driven content-negotiation-manager="contentNegotiationManager">
    <mvc:message-converters register-defaults="true">
        <!-- 将StringHttpMessageConverter的默认编码设为UTF-8 -->
        <bean class="org.springframework.http.converter.StringHttpMessageConverter">
            <constructor-arg value="UTF-8" />
        </bean>
        <!-- 将Jackson2HttpMessageConverter的默认格式化输出为true -->
        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
            <property name="prettyPrint" value="true"/>
            <property name="objectMapper">  
                <bean class="com.eversec.windowtool.common.mapper.JsonMapper"></bean>  
            </property> 
        </bean>

这是怎么回事啊?

阅读 2.8k
2 个回答

你看错地了。
看下你的@RequestBody Dict dict对象数据。

HttpServerletRequest#getParameterMap获取的是你url中queryString中的参数。如:

demo.com?a=b&c=d&e=f

可以先使用 console.log(JSON.stringify(args)) 看看 JSON.stringify(args) 的内容,然后检查 Dict 这个类的字段名称和 args 的那些键是否一致。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题