开发者社区> 问答> 正文

SpringMVC3.2 无法接收json参数

环境:SpingMVC3.2+jQuery。
问题:方法能访问到。
1)在ajax中使用contentType : "application/json"时,controller无法获取参数。
2)在ajax中不使用contentType时,controller能获取参数,但是会报错,因为参数中含有list,去掉list可以正常访问。
JS方法片段:

$.ajax({
                    contentType :   "application/json",
                    url :   systemWebUrl + "/pi/savePIDetail.do",
                    type    :   "post",
                    dataType    :   "json",
                    //data  :   {"articleVO":JSON.stringify(formData)},
                    data    :   formData,//JSON.stringify(formData),
                    success :   function(data){
                        console.log(data);
                    }
});

其中传入后台的参数formData数据类似:

{"nodeId":"8","title":"abc","isOriginal":"1","keywords":"abc","summary":"abc","coverResourceId":"","contents":[{"type":"1","content":"asdf"},{"type":"1","content":"wqer"}]}


Controller代码片段:
@RequestMapping("/savePIDetail")
@ResponseBody
public String savePIDetail(ArticleVO articleVO){
        ModelMap map = new ModelMap();
        ArticleVO article = new ArticleVO();
        //ArticleVO article = JSON.parseObject(articleVO,ArticleVO.class);
        map.put("msg", articleVO);
        return JSON.toJSONString(map);
}

参数ArticleVO片段:

…………
/**
     * 是否原创
     */
private Boolean isOriginal;
    /**
     * 摘要
     */
private String summary;
 /**
     * 内容列表
     */
private List<ArticleContentVO> contents;

getter/setter

mvc.xml配置片段:

<mvc:annotation-driven>
        <mvc:message-converters register-defaults="true">
            <ref bean="fastJsonHttpMessageConverter"/>
        </mvc:message-converters>
</mvc:annotation-driven> 

<bean id="fastJsonHttpMessageConverter" class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"> 
        <property name="supportedMediaTypes">
            <list>
                <value>application/json;charset=UTF-8</value>
                <value>text/html;charset=UTF-8</value>
                <value>text/plain;charset=UTF-8</value>
            </list>
        </property>
</bean>

我觉得上面这段配置返回时才用得到。

ajax中不使用contentType时,并且参数有list,后台报错内容片段:

 org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.beans.InvalidPropertyException: Invalid property 'contents[0][content]' of bean class [com.xxx.admin.vo.ArticleVO]: Property referenced in indexed property path 'contents[0][content]' is neither an array nor a List nor a Map; returned value was [asdf]

折腾了几天了,没找到原因,使用字符串传到后台,然后JSON.parseObject()也能使用,但是总觉得不该是这样的,请大家帮忙看下原因,如果问题没有描述清楚的,请提出来,我再改,谢谢了。

展开
收起
杨冬芳 2016-07-04 18:16:30 2950 0
1 条回答
写回答
取消 提交回答
  • IT从业

    目前问题算是解决了,除了问题描述中说的“使用字符串传到后台,然后JSON.parseObject()”,还有一种方法:在方法参数前加@RequestBody,ajax中data:JSON.stringify(formData)。
    JSON.parseObject()

    2019-07-17 19:51:03
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载

相关实验场景

更多