当我运行以下代码时:
public static void main(String[] args) throws JsonProcessingException {
Throwable ex = new IllegalArgumentException("something is wrong");
ObjectMapper objectMapper = new ObjectMapper();
System.out.println(objectMapper.writeValueAsString(ex));
}
控制台的输出将显示Throwable类中'cause'字段中的值为null。这是因为循环引用 - 类'字段初始化为值'this'。
我figured @JsonIdentityInfo是我正在寻找的,但是Throwable不是我创建的类,所以我需要使用Mixin。 {@ 3}}已弃用。在阅读了关于GitHub的documentation讨论之后,这是我最近添加mixin的尝试:
public static void main(String[] args) throws JsonProcessingException {
Throwable ex = new IllegalArgumentException("something" +
" wrong");
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.addMixIn(Throwable.class, MyMixn.class);
System.out.println(objectMapper.writeValueAsString(ex));
}
@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator
.class, property = "cause")
public static abstract class MyMixn {
}
但是,这只会在输出中添加另一个'cause'字段,值为1(除了前一个字段,空值)。
我想要的是简单地让'cause'字段输出简单的类名,所以我知道原因Exception。