基于属性的运行时白名单序列化 POJO
Serializing a POJO based on a runtime whitelist of properties
是否可以使用 Jackson 序列化 POJO 属性的白名单子集(其中白名单仅在运行时已知)?
目前我所知道的所有解决方案(视图、@JsonIgnoreProperties
等)都是静态的编译时解决方案。
此外,我的后端 returns 结果格式如下:
{
"outcome": "SUCCESS", // an enum
"message": "Success.", // a message for the developer
"result": {
// Some result that's different for each call
}
}
所以我正在寻找一种只能应用于部分对象图的解决方案(例如 result
属性 的内容)。
您可能想看看 @JsonFilter
。
请参阅 serializing only fields that meet some criteria 上的教程,其中包括此方法的详细信息以及其他一些方法。
完整性
@JsonFilter("pojo-filter")
class Pojo {
public int foo;
}
FilterProvider filters = new SimpleFilterProvider()
.addFilter("pojo-filter", new SimpleBeanPropertyFilter() {
@Override
protected boolean include(PropertyWriter writer) {
return "foo".equals(writer.getName())
? Random.nextBoolean()
: true;
}
});
new ObjectMapper().writer().filters(filters).write(new Pojo());
您可以在全球范围内使用 ObjectMapper.setFilterProvider
是否可以使用 Jackson 序列化 POJO 属性的白名单子集(其中白名单仅在运行时已知)?
目前我所知道的所有解决方案(视图、@JsonIgnoreProperties
等)都是静态的编译时解决方案。
此外,我的后端 returns 结果格式如下:
{
"outcome": "SUCCESS", // an enum
"message": "Success.", // a message for the developer
"result": {
// Some result that's different for each call
}
}
所以我正在寻找一种只能应用于部分对象图的解决方案(例如 result
属性 的内容)。
您可能想看看 @JsonFilter
。
请参阅 serializing only fields that meet some criteria 上的教程,其中包括此方法的详细信息以及其他一些方法。
完整性
@JsonFilter("pojo-filter")
class Pojo {
public int foo;
}
FilterProvider filters = new SimpleFilterProvider()
.addFilter("pojo-filter", new SimpleBeanPropertyFilter() {
@Override
protected boolean include(PropertyWriter writer) {
return "foo".equals(writer.getName())
? Random.nextBoolean()
: true;
}
});
new ObjectMapper().writer().filters(filters).write(new Pojo());
您可以在全球范围内使用 ObjectMapper.setFilterProvider