首页 > 解决方案 > 使杰克逊在类的序列化尝试上失败

问题描述

有什么简单的方法可以让杰克逊无法序列化特定的类吗?

基本上我想确保包含一些敏感数据的类不会泄漏到任何地方,并且由于我们同时记录文本和 json,我担心它最终可能会被记录为 json 作为某个更大对象的一部分。(当然我可以让它序列化为*****字符串,但我认为错误更清楚地表明它甚至不应该在那里使用)。

我现在唯一的想法是自定义 Serizalizer,它只是抛出一个异常,但我想知道是否有一些更简单的方法可以告诉杰克逊远离那个类。

标签: javajackson

解决方案


public class YourBlackListingSerializer extends StdSerializer<YourPojo> {

    public YourBlackListingSerializer() {
        this(null);
    }

    public YourBlackListingSerializer(Class<YourPojo> t) {
        super(t);
    }

    @Override
    public void serialize(
      Item value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
        throw new CustomException("This class can't be serialized");
    }
}

这应该有效。

然后注册序列化器

ObjectMapper mapper = new ObjectMapper();

SimpleModule module = new SimpleModule();
module.addSerializer(YourPojo.class, newYourBlackListingSerializer());
mapper.registerModule(module);

但是,如果您只想忽略这些字段,那么

@JsonIgnore
private String password;

@JsonIgnore
public String getPassword() {
    return password;
}

@JsonProperty
public void setPassword(final String password) {
    this.password = password;
} 

推荐阅读