Pep*_*mez 8 serialization spring dto jackson
我正在尝试序列化一个我无法触及任何内容的类。问题是我想忽略一些getWhatever() getter 方法,但我无法使用@JsonIgnore标记 getter 方法,因为这意味着触及 DTO 类。
该序列化是通过 Spring REST Web 服务中的@RestController方法进行的,因此如果它能成为考虑到这一点的解决方案,那就太好了。
我想到了一个我不喜欢的解决方案...它将为我想要序列化的 DTO 类创建一个自定义序列化器,这样我就可以控制什么被序列化,什么不被序列化,然后,从@RestController,不是返回 DTO 类(我认为这是更优雅的),而是在使用ObjectMapper获取 JSON 字符串并强制自定义序列化程序后返回String 。
我不喜欢这个解决方案,因为:
预先感谢您...任何帮助将不胜感激
编辑(解决方案) 由于@Cassio Mazzochi Molin 的想法,我终于采用了这个解决方案:
interface FooMixIn {
@JsonIgnore
Object getFoo();
@JsonIgnore
Object getBar();
}
@Service
public class ServiceFooSerializer extends SimpleModule{
public ServiceFooSerializer(){
this.setMixInAnnotation(Foo.class, FooMixIn.class);
}
}
Run Code Online (Sandbox Code Playgroud)
当无法修改类时,您可以使用混合注释。
您可以将其视为一种面向方面的方式,在运行时添加更多注释,以增强静态定义的注释。
首先定义一个混合注释接口(类也可以):
public interface FooMixIn {
@JsonIgnore
Object getWhatever();
}
Run Code Online (Sandbox Code Playgroud)
然后配置ObjectMapper
为使用定义的接口作为 POJO 的混合:
ObjectMapper mapper = new ObjectMapper().addMixIn(Foo.class, FooMixIn.class);
Run Code Online (Sandbox Code Playgroud)
一些使用注意事项:
private
、protected
、...)和方法实现将被忽略。有关更多详细信息,请查看 Jackson文档。
归档时间: |
|
查看次数: |
6505 次 |
最近记录: |