fastjson反序列化问题

问题:fastjson反序列化遇到坑(无法对返回值不为void的set方法赋值???求解)

static class A{
  
    private int id;
    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "A{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

static class B<M extends Model<M>> extends Model<M> {
    public Integer getId() {
        return get("id");
    }

    public M setId(Integer id) {
        return set("id", id);
    }

    public String getName() {
        return get("name");
    }

    public void setName(String name) {
        set("name", name);
    }

    @Override
    public String toString() {
        return "B{" +
                "id=" + this.getId() +
                ", name='" + this.getName() + '\'' +
                '}';
    }
}

static class BB extends B<BB>{

}


@org.junit.Test
public void test3(){
    String rawData = "[{id: 1, name: '123'}, {id: 2, name: '456'}]";
    List<A> a = JSON.parseArray(rawData, A.class);
    System.out.println(a);

    List<B> b = JSON.parseArray(rawData, B.class);
    System.out.println(b);

    List<BB> bb = JSON.parseArray(rawData, BB.class);
    System.out.println(bb);
}

输出结果:

image.png


评论区

JFinal

2020-08-18 20:35

返回值不为 void, fastjson 会认为不是一个 setter 方法,所以也就不转换了

这也是为啥 jfinal 的 BaseModel 生成器所生成的 setter 方法没有返回值的原因

建议你找找 fastjson 的文档,估计有相关配置可以支持