К сожалению, когда мы пишем пользовательский сериализатор, нам нужно позаботиться о null
значениях самостоятельно.Чтобы сделать его хотя бы немного лучше, мы можем добавить новый метод writeStringField
и использовать его.Например:
class PersonJsonSerializer extends JsonSerializer<Person> {
@Override
public void serialize(Person value, JsonGenerator gen, SerializerProvider provider) throws IOException {
gen.writeStartObject();
writeStringField(gen, "firstname", value.getFirstName());
gen.writeEndObject();
}
private void writeStringField(JsonGenerator gen, String fieldName, String value) throws IOException {
if (value != null) {
gen.writeStringField(fieldName, value);
}
}
}
Если вам нужно изменить только имена свойств, вы можете использовать опцию PropertyNamingStrategy
.Существует несколько возможностей, таких как:
- LOWER_CASE - Соглашение об именовании, в котором все слова логического имени указаны в нижнем регистре, и между словами не используется разделитель.
- KEBAB_CASE - Соглашение об именах, используемое в таких языках, как Лисп, где слова пишутся строчными буквами, разделенными дефисами.
- Для получения дополнительной документации см.
Пример ObjectMapper
Настройка может выглядеть следующим образом:
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
mapper.setPropertyNamingStrategy(PropertyNamingStrategy.LOWER_CASE);
Если нет предопределенной стратегии, которая удовлетворяет вашим потребностям, вы можете использовать аннотацию JsonView
.