[alibaba/fastjson]Json对象不能转bean含有字符类型成员

2025-11-25 199 views
2

使用 ((JSONObject) objs).toJavaObject(bean.getClass()); 其中bean里含有字符Character类型的属性成员,为什么抛出以下异常? can not cast to : java.lang.Character 是我的json串的问题还是包的问题?帮确定下。 版本1.2.32

回答

9

增加测试用例 定义bean: public class TestBean { private String name; private Character sex; private Integer age; private Double money; get(),set()... } 测试转换: ` TestBean tb = new TestBean(); tb.setName("zs"); tb.setSex('M'); tb.setAge(20); tb.setMoney(100.5d);

    try {
        String jsonStr = JSON.toJSONString(tb);
        System.out.println(jsonStr);        

        TestBean tb2 = JSON.parseObject(jsonStr).toJavaObject(tb.getClass());
        System.out.println(tb2.toString());
    } catch (Exception e) {
        e.printStackTrace();
    }

`

输出: {"age":20,"money":100.5,"name":"zs","sex":"M"} com.alibaba.fastjson.JSONException: can not cast to : java.lang.Character at com.alibaba.fastjson.util.TypeUtils.castToJavaBean(TypeUtils.java:1052) at com.alibaba.fastjson.util.TypeUtils.cast(TypeUtils.java:689) at com.alibaba.fastjson.JSON.toJavaObject(JSON.java:961) at yxerp.Test.main(Test.java:23) Caused by: com.alibaba.fastjson.JSONException: can not cast to : java.lang.Character at com.alibaba.fastjson.util.TypeUtils.cast(TypeUtils.java:818) at com.alibaba.fastjson.util.TypeUtils.cast(TypeUtils.java:868) at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.createInstance(JavaBeanDeserializer.java:1010) at com.alibaba.fastjson.util.TypeUtils.castToJavaBean(TypeUtils.java:1050) ... 3 more

0

string转char的问题,加个特殊处理即可

1

JSON.parseObject(jsonStr).toJavaObject(tb.getClass()); 这一句改成 JSON.parseObject(jsonStr,tb.getClass()); 即可

5

查了一下history,发现从最开始的版本中TypeUtils里p730如下代码被注释: if (clazz == char.class || clazz == Character.class) { return (T) castToChar(obj); } 放开这段注释即可。

已PR+testcase: #1238

@wenshao

9

@zxw0558 可以close了

6

收到 @wuwen5