com.alibaba.fastjson.JSONException: parse enum AppType error, value : {"type":3}

使用@JSONType后,无法反序列化,需要自己写反序列化,比如:

package com.alibaba.json.bvt.serializer.enum_;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.annotation.JSONType;
import com.alibaba.fastjson.parser.DefaultJSONParser;
import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer;
import junit.framework.TestCase;

import java.lang.reflect.Type;

public class EnumCustomCodecTest extends TestCase {

    public void test_for_enum() throws Exception {
        Type type = Type.A;
        String str =JSON.toJSONString(type);

        assertEquals("{\"id\":1001,\"name\":\"aaa\"}", str);

        Type type2 = JSON.parseObject(str, Type.class);
        Type type3 = JSON.parseObject(str, Type.class);

        assertSame(type, type2);
        assertSame(type, type3);

    }

    @JSONType(serializeEnumAsJavaBean = true, deserializer = TypeDeser.class)
    public static enum Type {
        A(1001, "aaa"), B(1002, "bbb")
        ;

        public int id;
        public String name;

        Type(int id, String name) {
            this.id = id;
            this.name = name;
        }

        public static Type valueOf(long id) {
            if (id == 1001) {
                return A;
            } else if (id == 1002) {
                return B;
            }
            return null;
        }
    }

    public static class TypeDeser implements ObjectDeserializer {

        public <T> T deserialze(DefaultJSONParser parser, java.lang.reflect.Type type, Object fieldName) {
            JSONObject object = parser.parseObject();
            long id = object.getLongValue("id");
            return (T) Type.valueOf(id);
        }

        public int getFastMatchToken() {
            return 0;
        }
    }
}

参考链接:
enum使用@JSONType后,无法反序列化

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
com.alibaba.fastjson.JSONExceptionfastjson库中的一个异常类,表示在解析JSON数据时发生了错误。根据提供的引用内容,有两个报错信息,分别是"error, offset 2924, char"和"syntax error, pos 9"。这些报错信息提供了一些关于错误的提示。 根据第一个报错信息"error, offset 2924, char",可以推断出在解析JSON数据时发生了错误,错误的位置在第2924个字符处。具体的错误原因需要查看更多的代码和上下文信息才能确定。 根据第二个报错信息"syntax error, pos 9",可以推断出在解析JSON数据时发生了语法错误,错误的位置在第9个字符处。这可能是由于JSON数据格式不正确导致的。 为了解决这个问题,你可以按照以下步骤进行排查和修复: 1. 检查JSON数据的格式是否正确,确保所有的括号、引号、逗号等符号都是成对出现的,并且没有缺失或多余的符号。 2. 检查JSON数据中的特殊字符是否正确转义,例如双引号、反斜杠等。 3. 如果JSON数据中包含了特殊字符或非法字符,尝试对其进行处理或替换。 4. 如果JSON数据中包含了嵌套的对象或数组,确保其嵌套结构正确,并且每个对象或数组都有正确的结束符号。 5. 如果JSON数据中包含了自定义的数据类型或格式,确保fastjson库能够正确解析这些数据类型或格式。 请注意,以上步骤仅供参考,具体的解决方法需要根据实际情况进行调试和修复。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值