欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

springmvc Ajax请求返回对象异常问题

程序员文章站 2024-01-25 20:02:10
...

在使用ajax post请求,dataType: "json"为预期服务器返回的数据类型,controller通过@responseBody返回封装的SimpleJsonResult对象的情况下,出现报错信息

springmvc Ajax请求返回对象异常问题

意思就是不能返回SimpleJsonResult对象,只能返回json数据,但使用SimpleJsonResult封装的对象,能够美化代码以及方便开发。

错误一、@responseBody只能返回字符串格式,如果需要返回SimpleJsonResult,需要在springmvc配置中添加转换器converter,需要在spring-mvc.xml配置文件中添加

<!-- 解决@ResponseBody注解直接返回对象并转换成JSON时出现406问题,同时解决了返回String类型乱码的问题 -->  
    <mvc:annotation-driven>  
        <mvc:message-converters>  
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
            <!-- HttpMessageConverter<T> 是 Spring3.0 新添加的一个接口,负责将请求信息转换为一个对象(类型为 T),将对象(类型为 T)输出为响应信息  -->
                <property name="supportedMediaTypes">  
                    <list>
                        <!-- 防止乱码 -->
                        <value>text/plain;charset=UTF-8</value>  
                        <value>text/html;charset=UTF-8</value>  
                    </list>  
                </property>  
            </bean>
            <!-- 请求信息转换器,负责读取和写入json格式的数据 -->  
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">  
                <property name="supportedMediaTypes">  
                    <list>  
                        <value>application/json; charset=UTF-8</value>  
                        <value>application/x-www-form-urlencoded; charset=UTF-8</value>  
                    </list>  
                </property>  
            </bean>  
        </mvc:message-converters>  
    </mvc:annotation-driven>

错误二、添加完以后,再次执行,出现错误 

元素 'mvc:annotation-driven' 必须不含字符或元素信息项 [子级], 因为该类型的内容类型为空。

接着找原因,发现我的xml里面的mvc命名空间中xsd版本是3.0的,但是我用的是MappingJackson2HttpMessageConverter转换器,版本是4.X的,解决方案或者转化器为MappingJacksonHttpMessageConverter,或者把xsd版本改为4.0的

错误三、这时候重新执行,还是出现了另外的错误。。。。

Initialization of bean failed; nested exception is java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/JsonGenerator

NoClassDefFoundError错误,应该是缺少架包,加入以下架包,执行正确

<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-databind</artifactId>
	<version>2.7.4</version>
</dependency>
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-core</artifactId>
	<version>2.7.4</version>
</dependency>
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-annotations</artifactId>
	<version>2.7.4</version>
</dependency>

finish!!!