fastjson解析对象时怎样能在get方法发生异常时直接抓取其对应的私有属性?

ping_lun 发布于 2016/06/10 17:18
阅读 761
收藏 0

如现在要解析Person对象为json,但其name对应的get方法里面做了限制在某些情况下会抛出异常,这样就影响了fastjson的解析,怎样能在get方法发生异常的情况下直接读取其对应的私有属性(name), 实例代码如下:

public class Person {
    private String name;
    private String country;
    private int age;
    public String getName() {
        /**
         * 以下表示在某种情况下 此get方法可能会发生异常
         */
        //
        throw new IllegalStateException("cached!");        
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getCountry() {
        return country;
    }
    public void setCountry(String country) {
        this.country = country;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }       
}

测试代码如下:

public static void main(String[] args) {
        // TODO Auto-generated method stub
        Person p=new Person();
        p.setAge(10);
        p.setName("Person1");
        p.setCountry("CN");
        
        System.out.println(JSON.toJSONString(p));
    }

异常如下:

Exception in thread "main" java.lang.IllegalStateException: cached!
    at json.Person.getName(Person.java:12)
    at Serializer_1.write1(Unknown Source)
    at Serializer_1.write(Unknown Source)
    at com.alibaba.fastjson.serializer.JSONSerializer.write(JSONSerializer.java:369)
    at com.alibaba.fastjson.JSON.toJSONString(JSON.java:418)
    at com.alibaba.fastjson.JSON.toJSONString(JSON.java:406)
    at Test.main(Test.java:22)

我看了一下fastjson貌似抓取get方法这一部分是用asm实现的,我对asm不熟不知道怎样修改其代码,请高手帮忙,谢谢!



加载中
0
西夏一品堂
西夏一品堂
修改getname方法,try住,当发送异常的时候,直接返回name值
返回顶部
顶部