No converter found for return value of type: class com.alibaba.fastjson.JSONObject MappingJackson2Ht

本文介绍如何配置SpringMVC以避免在使用IE浏览器进行AJAX请求时出现JSON文件下载的情况。针对fastjson和jackson提供了具体的配置示例。

概述:

报这种错误表示fastjson 或 jackson 转换SpringMVC错误,需要引入转换器;

在spring-mvc.xml 配置增加:

如果是fastjson:

<mvc:annotation-driven>
        <mvc:message-converters register-defaults="false">
            <!-- 避免IE执行AJAX时,返回JSON出现下载文件 -->
            <bean id="fastJsonHttpMessageConverter" class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <!-- 这里顺序不能反,一定先写text/html,不然ie下出现下载提示 -->
                        <value>text/html;charset=UTF-8</value>
                        <value>application/json;charset=UTF-8</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>


如果是jackson:

<!--避免IE执行AJAX时,返回JSON出现下载文件 -->
	<bean id="mappingJackson2HttpMessageConverter"
		class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
		<property name="supportedMediaTypes">
			<list>
				<value>text/html;charset=UTF-8</value>
				<value>text/json;charset=UTF-8</value>
				<value>application/json;charset=UTF-8</value>
			</list>
		</property>
	</bean>


### Java 中 `IllegalArgumentException` 和 FastJSON 的 `JSONObject` 当在 Java 开发过程中遇到 `java.lang.IllegalArgumentException` 错误,尤其是在使用阿里巴巴开源的 JSON 序列化/反序列化工具 **FastJSON** 时,通常是因为传入的数据不符合预期格式或者违反了某些约束条件。 #### 原因分析 1. **数据不匹配** 如果尝试通过 `JSONObject.parseObject(String text, Class<T> clazz)` 方法解析字符串到指定对象类型时,输入的 JSON 字符串可能与目标类结构不符。这可能导致抛出 `IllegalArgumentException`[^1]。 2. **非法字符或语法错误** 输入的 JSON 数据可能存在语法问题,比如缺少闭合括号、多余的逗号或其他非法字符。这些都会触发异常[^2]。 3. **字段映射失败** 当 JSON 对象中的键名无法正确映射为目标类的属性名称时,也可能引发此异常。例如大小写敏感性问题或缺失必要的 getter/setter 方法[^3]。 #### 解决方案 以下是几种常见的排查方法以及如何修复此类问题: - **验证 JSON 格式** 使用在线工具(如 https://jsonlint.com/)来校验 JSON 是否合法无误。如果发现有错,则修正原始数据源后再重新执行程序逻辑[^4]。 - **捕获并处理异常** 在调用可能会出现问题的方法之前增加 try-catch 结构以便更好地控制流程走向,并记录详细的日志信息用于后续调试工作。 ```java try { String jsonString = "{\"name\":\"John\", \"age\":30}"; MyCustomClass obj = JSONObject.parseObject(jsonString, MyCustomClass.class); } catch (Exception e) { System.err.println("Error parsing JSON string: " + e.getMessage()); } ``` - **更新依赖版本** 确保项目所使用的 fastjson 版本是最新的稳定版之一,因为较旧版本可能存在已知缺陷已被官方修复掉的情况[^5]。 --- ### 示例代码展示 下面给出一段完整的示例演示如何安全地利用 fastjson 进行基本操作同时避免潜在的风险因素: ```java import com.alibaba.fastjson.JSONObject; public class MainApp { public static void main(String[] args){ String jsonStr = "{ \"id\" : 1 , \"title\" : \"Sample Title\" }"; try{ SampleBean beanInstance = JSONObject.parseObject(jsonStr, SampleBean.class); if(beanInstance != null){ System.out.printf("Parsed Bean Instance -> ID:%d TITLE:%s%n", beanInstance.getId(),beanInstance.getTitle()); } }catch(Exception ex){ // Log exception details here. System.err.println(ex.toString()); } } } class SampleBean{ private int id; private String title; public int getId() {return this.id;} public void setId(int value){this.id=value;} public String getTitle(){return this.title;} public void setTitle(String val){this.title=val;} } ``` ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值