我想实现以下功能:在控制器方法的响应中序列化dto模型时,通常返回 而不包含几个字段(例如name
字段) ,但对于某些选择的端点,应完整返回模型(带有name
字段)。
要实现它,我已经在模型中标记了通常要用@JsonView
从响应中隐藏的字段,如下所示:
@JsonView(View.Detail.class)
private String name;
,并且我已经将DEFAULT_VIEW_INCLUSION属性设置为true
,这个想法是,如果我不要在控制器方法上放置@JsonView
批注,它将返回没有name
字段:
enabled属性将使Jackson在没有@JsonView
批注的情况下序列化模型中的每个字段,并且name
不应序列化,因为没有设置视图,因此特别地View.Detail
没有设置,因此期望该视图的字段不应序列化。
但是,这种方式行不通。当我未使用@JsonView
标记控制器方法时,Jackson似乎完全忽略了模型上的任何 @JsonView
批注,并对所有内容进行了序列化从此方法返回响应时。
使其生效的唯一方法是在每个我希望使用默认功能(无name
字段的dto模型序列化)的虚拟机上添加单个@JsonView(View.SomeDummyView.class)
的控制器方法。执行此操作时,由于启用了DEFAULT_VIEW_INCLUSION,它会再次序列化没有@JsonView
批注的所有内容,并且不会序列化name
,因为它需要View.Details.class
视图,而不是{{1 }}。
现在我的问题是:我如何才能迫使Jackson对其序列化的每个响应验证模型中字段上的View.SomeDummyView.class
批注,即使生成该响应的控制器方法不是用@JsonView
注释?