Заставьте Джексона потерпеть неудачу при попытке сериализации класса - PullRequest
0 голосов
/ 17 февраля 2020

Есть ли какой-нибудь простой способ заставить Джексона не сериализовать указанный класс c?

По сути, я хочу убедиться, что класс, содержащий некоторые конфиденциальные данные, нигде не просочится, и так как мы регистрируем оба в тексте и json Боюсь, это может закончиться тем, что вы войдете в систему как json как часть более крупного объекта. (конечно, я мог бы заставить его сериализоваться в строку *****, но я думаю, что из-за ошибки становится понятнее, что его там даже не предполагается использовать).

Моя единственная идея сейчас - это пользовательский Serizalizer, который просто выдает исключение, но мне было интересно, есть ли какой-нибудь более простой способ сказать Джексону держаться подальше от этого класса.

1 Ответ

1 голос
/ 17 февраля 2020
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;
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...