我试图通过SimpleBeanPropertyFilter
使用以下(简化)代码从序列化中筛选出某些字段:
public static void main(String[] args) {
ObjectMapper mapper = new ObjectMapper();
SimpleFilterProvider filterProvider = new SimpleFilterProvider().addFilter("test",
SimpleBeanPropertyFilter.filterOutAllExcept("data1"));
try {
String json = mapper.writer(filterProvider).writeValueAsString(new Data());
System.out.println(json); // output: {"data1":"value1","data2":"value2"}
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
private static class Data {
public String data1 = "value1";
public String data2 = "value2";
}
我们使用的SimpleBeanPropertyFilter.filterOutAllExcept("data1"));
我一直期望创建的序列化Json字符串仅包含{"data1":"value1"}
,但是我得到了{"data1":"value1","data2":"value2"}
。
如何创建一个尊重指定过滤器的临时编写器(在我的情况下,无法重新配置ObjectMapper)。
注意:由于我的应用程序中的使用场景,我只能接受不使用Jackson批注的答案。
通常,您Data
可以对您的类进行注释以应用过滤器:
@JsonFilter("test")
class Data {
您已指定不能在类上使用批注。您可以使用混入来避免注释Data
类。
@JsonFilter("test")
class DataMixIn {}
必须在上指定Mixins
,ObjectMapper
并且您指定不想重新配置它。在这种情况下,您始终可以复制ObjectMapper
及其配置,然后修改副本的配置。这不会影响ObjectMapper
代码中其他地方使用的原始文件。例如
ObjectMapper myMapper = mapper.copy();
myMapper.addMixIn(Data.class, DataMixIn.class);
然后用新的 ObjectMapper
String json = myMapper.writer(filterProvider).writeValueAsString(new Data());
System.out.println(json); // output: {"data1":"value1"}
问题内容: 我有以下课程- 我正在使用objectMapper.valueToTree(sections)将其转换为JsonNode。但是,当我打印相同的内容时,我仅从Entity类中看到id和name字段,而从Images列表中看不到任何内容。我是否需要添加任何种类的特殊逻辑或注释以确保同时打印列表。 以下是主要课程- 问题答案: 您需要为Entity#images添加getter和setter
处理注释 mixin 的杰克逊代码是否可以由第三方重用来混合非杰克逊注释? 处理混合蛋白的核心杰克逊类是什么?
我想使用Spring的RestTemplate plus Jackson来使用Web服务。我已经学习了几本教程,并且已经达到了创建DAO的目的。这是我获取所有域对象的方法: 但我的Web服务不会立即返回Station对象数组,而是以这种方式返回一个更具语义的表达式: 所以我的问题是,我不知道如何“告诉”RestTemplate在“stations”指示符之后立即解析对象列表,而不创建临时对象,这似
问题内容: 我正在用json主体调用aws lambda。因此json的字段与POJO中的字段名称不同。所以我要做的是在字段上添加@JsonProperty来告诉杰克逊json中的名字是什么。但是由于某种原因,它似乎无法识别它们,并且所有字段均为空。如果我传递一个具有与POJO相同的字段名称的json,那么它将起作用。这是我的课: 如果我通过 所有字段均为null,并且具有distinctId,u
问题内容: 创建类的首选方法是 一成不变的 可以使用Jackson进行序列化/反序列化 易于阅读且样本量低 最好是,我希望这样的工作: 然后将所有字段都设为。但是,它甚至不编译(我不确定为什么)。使用 将编译但仅产生 问题答案: 添加 ConstructorProperties : 用以下行在适当的位置创建文件: 向您的班级添加lombok 批注以使其不可变 然后,Jackson的序列化和反序列化
问题内容: 我可以有条件地使用@JsonUnwrapped吗?我不想在序列化过程中使用它,但想在反序列化对象时使用它。 一种实现方法是创建两个不同的类或创建一个子类,该子类仅覆盖需要在序列化和反序列化时表现不同的属性。这听起来不对。还有其他替代方法或Jackson的解决方法吗? 问题答案: 您可以使用MixIn功能。使用此要素类与注释分离。您可以使用在运行时中添加必要的注释。请参见以下示例: 上面