Как я могу предотвратить вывод пустых строк и пустых коллекций с помощью Elipse Yasson?
Мы хотим создать строку json для некоторых объектов Java, но не хотим, чтобы в вывод json добавлялись пустые строки или пустые массивы. Мы используем Eclipse Yasson 1.0.1 для создания строк json.
На самом деле то, что мы хотим, это поведение JsonInclude.Include.NON_EMPTY
Джексона, но мы не можем использовать Джексона.
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Person {
private int id;
private String name;
private String email;
private String birthPlace;
private List<String> phones;
}
public class Test {
public static void main(String[] args) {
Jsonb jsonb = JsonbBuilder.create();
Person person = Person.builder()
.id(1)
.name("Gert")
.email("") //Should not be in output -> nok
.birthPlace(null) //Should not be in output -> ok
.phones(new ArrayList<>()) //Should not be in output -> nok
.build();
String toJsonString = jsonb.toJson(person);
System.out.println(toJsonString);
}
}
Токовый выход
{"email":"","id":1,"name":"Gert","phones":[]}
Но мы хотим, чтобы это было
{"id":1,"name":"Gert"}
0 ответов
Я проверил документацию и код, и Yasson
предоставляют только возможность игнорировать нулевые значения (которая активирована по умолчанию).
JsonbConfig config = new JsonbConfig().withNullValues(false);
Jsonb jsonb = JsonbBuilder.create(config);
Кажется, единственный вариант - реализовать собственный JsonbSerializer
для тебя Person
class, а не сериализовать поле, когда значение пусто.
public class PersonSerializer implements JsonbSerializer<Person> {
@Override
public void serialize(Person person, JsonGenerator generator, SerializationContext serializationContext) {
generator.writeStartObject();
generator.write("id", person.getId());
if (person.getName() != null && !person.getName().isEmpty()) {
generator.write("name", person.getName());
}
if (person.getEmail() != null && !person.getEmail().isEmpty()) {
generator.write("email", person.getEmail());
}
// ...
generator.writeEnd();
}
}
И инициализировать Yasson
со следующим кодом:
JsonbConfig config = new JsonbConfig().withSerializers(new PersonSerializer());
Jsonb jsonb = JsonbBuilder.create(config);