@JsonIgnore с условиями - PullRequest
       0

@JsonIgnore с условиями

1 голос
/ 27 февраля 2020

Можно ли сериализовать ответ JSON, исключая при этом некоторые элементы на основе условий If?

if(a == 1) {
   //show element
} else {
   //don't show element
}

Я пытался использовать @JSONIgnore, но он просто игнорирует элемент независимо от условий. Я новичок в этом пространстве. Любые идеи?

РЕДАКТИРОВАТЬ: я работаю над корпоративным программным обеспечением, поэтому использование сторонних библиотек не будет возможным.

Ответы [ 2 ]

2 голосов
/ 27 февраля 2020

Вы можете использовать пользовательский сериализатор Джексона.

public class ConditionalValueSerializer extends StdSerializer<Integer> {
    public ConditionalValueSerializer() {
        this(null);
    }

    public ConditionalValueSerializer(Class<Integer> t) {
        super(t);
    }

    @Override
    public void serialize(Integer a, JsonGenerator gen, SerializerProvider provider) throws IOException {
        if(a == 5 ){
            gen.writeString(a.toString());
        } else {
            gen.writeString("");
        }

    }
}

Затем использовать пользовательский сериализатор в объекте.

public class SomeThing {
    public String name;

    @JsonSerialize(using = ConditionalValueSerializer.class)
    public Integer value;
}
1 голос
/ 27 февраля 2020

Я знаю, что ваш вопрос о @JsonIgnore, но вы можете попробовать @JsonInclude:

@JsonInclude(value = JsonInclude.Include.CUSTOM, 
             valueFilter = CustomValueFilter.class)
private Integer value;
public class CustomValueFilter {

    @Override
    public boolean equals(Object other) {

        Integer a = (Integer) other;
        return a == 1;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...