Ограничить размер записи строки с помощью jackson

У меня есть список объектов с полем "описание". Это поле может быть огромным (+3000 символов), но я использую его в предварительном просмотре (я отображаю только первые 100 символов).

Есть ли способ в Джексоне ограничить размер строки при записи? Я только хочу, чтобы Джексон обрезал его до 100 символов. (Здесь проверка bean-компонента не требуется).

Например, если у меня есть такой объект:

{
    "description" : "bla bla bla bla... + 3000 char"
}

В идеале я хочу, чтобы он был обрезан так:

{
    "description" : bla bla [max 100 chars] bla..."
}

Спасибо.


person Oreste Viron    schedule 17.05.2017    source источник


Ответы (1)


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

public class DescriptionSerializer extends JsonSerializer<String> {

    @Override
    public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException, JsonProcessingException {

        if(value.length() > 100){
            value = value.substring(0, 100) + "...";
        }
        gen.writeString(value);
        
    }
    
}

И аннотируйте свое поле description, чтобы использовать этот пользовательский сериализатор.

public class Bean{
   
   @JsonSerialize(using=DescriptionSerializer.class)
   private String description

}
person Justin Jose    schedule 17.05.2017
comment
Здравствуйте, спасибо за ваш ответ. Что делать, если я хочу использовать свой DTO в других случаях, когда мне нужно полное описание? - person Oreste Viron; 17.05.2017
comment
Вы можете использовать Jackson Views, как описано в этом вопрос - person Justin Jose; 18.05.2017
comment
Да, это поможет :-) Спасибо! - person Oreste Viron; 18.05.2017