Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Jackson 2.x将Throwable的子类作为字符串写入时为空字段_Java_Jackson2 - Fatal编程技术网

Java 使用Jackson 2.x将Throwable的子类作为字符串写入时为空字段

Java 使用Jackson 2.x将Throwable的子类作为字符串写入时为空字段,java,jackson2,Java,Jackson2,当我运行以下代码时: public static void main(String[] args) throws JsonProcessingException { Throwable ex = new IllegalArgumentException("something is wrong"); ObjectMapper objectMapper = new ObjectMapper(); System.out.println(objectMapper.writeVal

当我运行以下代码时:

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”初始化

我知道这就是我想要的,但是Throwable不是我创建的类,所以我需要使用Mixin。不推荐使用该方法。在阅读了GitHub上的讨论之后,这是我添加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 {

}
但是,这只会将另一个“原因”字段添加到值为1的输出中(除了前一个字段之外,该字段的值为null)


我只想让'cause'字段输出简单的类名,因此我知道原因异常。

我记得在以前的项目中,由于Throwable的序列化,特别是'cause'字段,我遇到了严重的问题。也许这次您会找到一个很好的方法来做您想做的事情,但就我个人而言,如果我必须再次这样做,我会在序列化/jsonify之前在我自己的模型类中转换异常您会如何转换异常?“原因”字段需要能够引用一个异常,该异常具有另一个“原因”字段,该字段应引用一个异常,依此类推。我猜在某些情况下,您可以使用任意规则来约束您保留的内容。这在很大程度上取决于您的用例,如果您只需要传递有关异常的信息而不使用算法,或者如果您实际需要在序列化后处理异常,则情况会有所不同,在这种情况下,可能会更复杂,我记得在以前的项目中,由于Throwable的序列化,特别是'cause'字段,我遇到了严重的问题。也许这次您会找到一个很好的方法来做您想做的事情,但就我个人而言,如果我必须再次这样做,我会在序列化/jsonify之前在我自己的模型类中转换异常您会如何转换异常?“原因”字段需要能够引用一个异常,该异常具有另一个“原因”字段,该字段应引用一个异常,依此类推。我猜在某些情况下,您可以使用任意规则来约束您保留的内容。这在很大程度上取决于您的用例,如果您只需要传递有关异常的信息而不使用算法,或者如果您实际上需要在序列化之后处理异常,则情况会有所不同,在这种情况下,可能会更复杂