美文网首页
一次fastjson引起的bug

一次fastjson引起的bug

作者: 修行者12138 | 来源:发表于2021-07-21 23:57 被阅读0次

有一个简单的响应类Response和学生类Student

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Response<T> {
    /**
     * 返回的消息内容
     */
    String msg;

    /**
     * 返回的数据
     */
    T data;

    public static <T> Response success(String message, T data) {
        return Response.builder().msg(message).data(data).build();
    }
    
    public static <T> Response fail(String message, T data) {
        return Response.builder().msg(message).data(data).build();
    }
}

@Data
@AllArgsConstructor
@Slf4j
public class Student {
    private String name;

    private Integer age;
}

还有一段符合Reponse<List<Student>>格式的json字符串

{
    "data":[
        {
            "age":23,
            "name":"ltm"
        },
        {
            "age":22,
            "name":"zlp"
        }
    ],
    "msg":"success"
}

使用fastjson把json字符串转成Reponse<List<Student>>

下面这段代码

public static void main(String[] args) {
    Student student = getFirstStudent();
}

private static Student getFirstStudent() {
    String jsonStr = "{\"data\":[{\"age\":23,\"name\":\"ltm\"},{\"age\":22,\"name\":\"zlp\"}],\"msg\":\"success\"}";
    Response<List<Student>> copy = JSON.parseObject(jsonStr, Response.class);
    log.info(JSON.toJSONString(copy));
    return copy.getData().get(0);
}

编译阶段不会报错,但是运行报错

Exception in thread "main" java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to com.crazyboy.consul.entity.Student

正确的解法是

private static Student getFirstStudent() {
    String jsonStr = "{\"data\":[{\"age\":23,\"name\":\"ltm\"},{\"age\":22,\"name\":\"zlp\"}],\"msg\":\"success\"}";
    Response<List<Student>> copy = JSON.parseObject(jsonStr, new TypeReference<Response<List<Student>>>(){});
    log.info(JSON.toJSONString(copy));
    return copy.getData().get(0);
}

相关文章

  • fastjson在kotlin+java混合项目中的bug

    fastjson在kotlin+java混合项目中的bug 环境 kotlin 1.3 + java 8 + fa...

  • FastJSON的bug及解决

    今天遇到一个bug,fastJSON在将Map转换为字符串的时候,会出现当KEY为Long类型时,转换出来的字符串...

  • Fastjson 嵌套类序列化,出现 "$ref:xxx"

    问题 Fastjson 嵌套序列化 'bug', 某些情况下会输出{"$ref" : "$.a[1].b[2].c...

  • Gson的使用

    为什么转用Gson了,FastJSON bug实在是太多了! 依赖 pojo 谷歌Gson解析json json转...

  • 记一次由^引起的bug

    前言 后台管理系统使用的UI组件是element-ui,使用的版本是2.8.2。 问题 线上使用人员反馈,最近在使...

  • rpc引起的bug

    今天算是又增强了自己对pomelo RPC的认识,因为一个bug。起初,我们游戏的角色信息是作为一个redis缓存...

  • getUserId引起的bug

    最近项目中在修改用户昵称的时候报了如下bug 这个问题很眼熟, 上次一个项目也报了。 所以这次记录一下。 原因是a...

  • FastJson序列化类的问题

    1. getter setter 的问题 有次开发中使用FastJson时出现了个bug,说是类里面没有某个属性,...

  • 记一次低级bug引起的反思

    最近,加入了一家跨境电商公司,从发文截止,也已有了17天,在最近开发的一个一元抢购活动中,因为自己的代码问题引发了...

  • 记一次友盟引起的BUG

    友盟SDK有一个私有类UMAOCTools,在类方法setupHook中hook了UIViewController...

网友评论

      本文标题:一次fastjson引起的bug

      本文链接:https://www.haomeiwen.com/subject/qscumltx.html