首页 > 技术文章 > JackSon序列化失败问题

CoderRdf 2021-01-07 14:39 原文

*** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message transform method call failed at JPLISAgent.c line: 844
*** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message transform method call failed at JPLISAgent.c line: 844
*** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message transform method call failed at JPLISAgent.c line: 844
*** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message transform method call failed at JPLISAgent.c line: 844
*** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message transform method call failed at JPLISAgent.c line: 844
jackson通过调用实体类的get方法获取值,实体方法中存在clone方法时,在get开头的方法中调用时,就会出现无限循环,进而序列化失败。
测试复现:
public class Son implements Cloneable {
@Override
protected Son clone() throws CloneNotSupportedException {
return (Son)super.clone();
}

public Son getClone() throws CloneNotSupportedException {
    return this.clone();
}
private int hight ;

private int start ;

private List<Address> address;

public int getHight() {
    return hight;
}

public int getStart() {
    return start;
}

public void setHight(int hight) {
    this.hight = hight;
}

public void setStart(int start) {
    this.start = start;
}

public List<Address> getAddress() {
    return address;
}

public void setAddress(List<Address> address) {
    this.address = address;
}

@Override
public String toString() {
    return "Son{" +
            "hight=" + hight +
            ", start=" + start +
            ", address=" + address +
            '}';
}

}
public static void main(String[] args) throws JsonProcessingException {
Son son = new Son();
son.setHight(1);
son.setStart(2);
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writeValueAsString(son));
Son son1 = mapper.readValue(mapper.writeValueAsString(son), Son.class);
System.out.println(son1);
}

推荐阅读