Java Jackson:如何仅序列化带注释的属性

Java Jackson:如何仅序列化带注释的属性,java,json,serialization,jackson,datamapper,Java,Json,Serialization,Jackson,Datamapper,我想在使用Jackson时定义自定义序列化策略(包括哪些字段)。我知道,我可以用视图/过滤器来实现这一点,但它引入了一件非常糟糕的事情——使用字段名的字符串表示,这会自动导致自动重构的问题 如何强制Jackson只序列化带注释的属性而不序列化其他内容?如果禁用所有自动检测,它应该只序列化已注释的属性——无论是属性本身还是getter。下面是一个简单的例子: private ObjectMapper om; @Before public void setUp() throws Exception

我想在使用Jackson时定义自定义序列化策略(包括哪些字段)。我知道,我可以用视图/过滤器来实现这一点,但它引入了一件非常糟糕的事情——使用字段名的字符串表示,这会自动导致自动重构的问题


如何强制Jackson只序列化带注释的属性而不序列化其他内容?

如果禁用所有自动检测,它应该只序列化已注释的属性——无论是属性本身还是getter。下面是一个简单的例子:

private ObjectMapper om;

@Before
public void setUp() throws Exception {
    om = new ObjectMapper();
    // disable auto detection
    om.disable(MapperFeature.AUTO_DETECT_CREATORS,
            MapperFeature.AUTO_DETECT_FIELDS,
            MapperFeature.AUTO_DETECT_GETTERS,
            MapperFeature.AUTO_DETECT_IS_GETTERS);
    // if you want to prevent an exception when classes have no annotated properties
    om.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
}

@Test
public void test() throws Exception {
    BlahClass blahClass = new BlahClass(5, "email", true);
    String s = om.writeValueAsString(blahClass);
    System.out.println(s);
}

public static class BlahClass {
    @JsonProperty("id")
    public Integer id;
    @JsonProperty("email")
    public String email;
    public boolean isThing;

    public BlahClass(Integer id, String email, boolean thing) {
        this.id = id;
        this.email = email;
        isThing = thing;
    }
}

如果您不想仅为特定类型配置映射器而执行此操作:

@JsonAutoDetect(
    fieldVisibility = Visibility.NONE,
    setterVisibility = Visibility.NONE,
    getterVisibility = Visibility.NONE,
    isGetterVisibility = Visibility.NONE,
    creatorVisibility = Visibility.NONE
)
public class BlahClass {
    @JsonProperty("id")
    private Integer id;
    @JsonProperty("email")
    private String email;
}

您可以轻松地使用
@JsonIgnore
@Mena对带注释的属性进行序列化,这一点都不好——它迫使我也对基类进行注释。我不想这样做,“它迫使我也对基类进行注释”-->我看不出它是如何做到这一点的。你注释你要忽略的属性,你就完成了,你的对象用所有的道具序列化,除了那些被忽略的道具。可能重复的作品作为一个符咒。你是最棒的!只需提及:它需要com.fasterxml.jackson.core.jackson-databind maven artifact-o。感谢您提供此响应。Jackson正在以我想要的方式进行序列化,而无需通过Mixin或CustomSerializer。