com.fasterxml.jackson.databind.JsonSerializer按键排除字段

时间:2018-03-14 10:59:37

标签: java spring-boot serialization jackson

我有一个课程,我无法控制它的来源:

public class SomeClassImpl implements SomeClass {
    private SomeField someFiled; // Not serializable
    ... // Some other fields that are serializable
}

所以这个类不是完全Serializable,当我尝试使用Spring Boot将其序列化为json StackOverflowError时,我遇到了@ResponseBody

我有两种控制器方法:

@ResponseBody public SomeClassImpl get();

@ResponseBody public SomeOtherClass find();

我可以控制SomeOtherClass的来源,其中包含SomeClass作为属性。

我无法弄清楚如何使用@JsonIgnore注释忽略一个字段,我可能需要控制源。我可以用注释做的是我可以忽略SomeClass属性来自{{ 1}}这对上面的第一种方法没有帮助。所以我决定实施SomeOtherClass

JsonSerializer<SomeClassImpl>

或者我可以用注释处理这个吗?如果有,怎么样?感谢。

1 个答案:

答案 0 :(得分:2)

当修改源代码不是一个选项时,您可以使用混合注释Jackson annotations添加到bean。

首先定义混合注释界面或类:

public interface FooMixIn {

    @JsonIgnore
    Object getBiz();
}

然后配置ObjectMapper以将定义的界面用作POJO的混合:

ObjectMapper mapper = new ObjectMapper().addMixIn(Foo.class, FooMixIn.class); 
  • 杰克逊认可的所有annotation sets都可以混合进来。
  • 可以混合使用各种注释(成员方法,静态方法,字段,构造函数注释)。
  • 只有方法(和字段)名称和签名用于匹配注释:访问定义(privateprotected,...)和方法实现被忽略。

有关详细信息,请查看杰克逊documentation