没有注释的jackson过滤器属性

Smi*_*ile 1 java json annotations jackson

public Class User {
    private String name;
    private Integer age;
    ...
}

ObjectMapper om = new ObjectMapper();
om.writeValueAsString(user);
Run Code Online (Sandbox Code Playgroud)

如何在不使用@JsonIgnore等任何注释的情况下过滤属性?

Ben*_*yan 5

按名称排除属性的示例:

public Class User {
    private String name = "abc";
    private Integer age = 1;
    //getters
}

@JsonFilter("dynamicFilter")
public class DynamicMixIn {
}

User user = new User();
String[] propertiesToExclude = {"age"};
ObjectMapper mapper = new ObjectMapper()
      .addMixIn(Object.class, DynamicMixIn.class);
FilterProvider filterProvider = new SimpleFilterProvider()
                .addFilter("dynamicFilter", SimpleBeanPropertyFilter.serializeAllExcept(propertiesToExclude));
        mapper.setFilterProvider(filterProvider);

mapper.writeValueAsString(user); // {"name":"abc"}
Run Code Online (Sandbox Code Playgroud)

您可以代替DynamicMixIn创建MixInByPropName

@JsonIgnoreProperties(value = {"age"})
public class MixInByPropName {
}

ObjectMapper mapper = new ObjectMapper()
      .addMixIn(Object.class, MixInByPropName.class);

mapper.writeValueAsString(user); // {"name":"abc"}
Run Code Online (Sandbox Code Playgroud)

注意:如果您只想排除属性,User可以将Object.class方法的参数更改addMixInUser.class

按您可以创建的类型排除属性MixInByType

@JsonIgnoreType
public class MixInByType {
}

ObjectMapper mapper = new ObjectMapper()
      .addMixIn(Integer.class, MixInByType.class);

mapper.writeValueAsString(user); // {"name":"abc"}
Run Code Online (Sandbox Code Playgroud)