Кажется, что когда я использую пользовательские сериализаторы, @JsonInclude(Include.NON_NULL)
полностью игнорируется.
Мое требование - не сериализовать ключи, значения которых равны нулю.Я также хочу отформатировать строку, добавив разделители пробела для многозначного SortedSet
(поэтому я создал собственный сериализатор)
Пример текущего вывода без каких-либо нулевых значений
{
"age": "10",
"fullName": "John Doe"
"email":"doe@john.com john@doe.com test@gmail.com"
}
Примертекущего вывода со значением NULL
{
"age": "10",
"fullName": "John Doe"
"email":null
}
Ожидаемый вывод при нулевом значении электронной почты:
{
"age": "10",
"fullName": "John Doe"
}
DTO
@AllArgsConstructor
@Builder
@Data
@NoArgsConstructor
@ToString
@SuppressWarnings("PMD.TooManyFields")
public class User {
@JsonProperty("age")
private String age;
@JsonProperty("firstName")
private String name;
@JsonProperty("email")
@JsonInclude(JsonInclude.Include.NON_EMPTY)
@JsonSerialize(using = MultiValuedCollectionSerializer.class)
private SortedSet<String> email;
}
Custom Serializer
public class MultiValuedCollectionSerializer extends JsonSerializer<Collection> {
@Override
public void serialize(final Collection inputCollection,
final JsonGenerator jsonGenerator,
final SerializerProvider serializers) throws IOException {
jsonGenerator.writeObject(Optional.ofNullable(inputCollection)
.filter(input -> !input.isEmpty())
.map(collection -> String.join(" ", collection))
.orElse(null));
}
}