我有一个课程,我无法控制它的来源:
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>
或者我可以用注释处理这个吗?如果有,怎么样?感谢。
答案 0 :(得分:2)
当修改源代码不是一个选项时,您可以使用混合注释将Jackson annotations添加到bean。
首先定义混合注释界面或类:
public interface FooMixIn {
@JsonIgnore
Object getBiz();
}
然后配置ObjectMapper
以将定义的界面用作POJO的混合:
ObjectMapper mapper = new ObjectMapper().addMixIn(Foo.class, FooMixIn.class);
private
,protected
,...)和方法实现被忽略。有关详细信息,请查看杰克逊documentation。