Пружинный ботинок generi c Струнная отделка Сериализация - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь внедрить универсальный c сериализатор Spring Trim для всех приложений, но, похоже, он не работает. И если я вручную помещаю этот сериализатор @JsonSerialize(using = StringTrimmerSerializer.class) в определенное поле, он работает, не зная, что мне нужно сделать, чтобы он работал во всем приложении, не помещая его для всех полей отдельно

import java.io.IOException;

import org.apache.commons.lang.StringUtils;
import org.springframework.boot.jackson.JsonComponent;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

@JsonComponent
public class StringTrimmerSerializer extends JsonSerializer<String> {

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

    if (!StringUtils.isEmpty(value)) {
      value = value.trim();
    }
    gen.writeString(value);
  }

}

Обновление:

Пробовал также регистрировать сериализатор, но та же проблема

@Configuration
public class JacksonConfiguration {

    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper mapper = new ObjectMapper(); //
        //mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        // mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, true);
        mapper.registerModule(new SimpleModule().addSerializer(String.class, new StringTrimmerSerializer()));
        return mapper;
    }

    /*
     * @Bean public Module customSerializer() { SimpleModule module = new
     * SimpleModule(); module.addSerializer(String.class, new
     * StringTrimmerSerializer()); return module; }
     */
}

Пакет основного класса: com.demo Пакет сериализатора: com.demo.config

Версия с загрузочной пружиной - 2.2.5.RELEASE Jackson-databind - 2.10.2

Ответы [ 2 ]

0 голосов
/ 05 апреля 2020

Мне удалось решить, зарегистрировав собственный сериализатор в сопоставителе объектов jaskcosn по умолчанию, а не создав новую ссылку на ObjectMapper.

@Configuration
public class JacksonConfiguration extends WebMvcConfigurationSupport {

    @Autowired
    private ObjectMapper objectMapper;

    public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        objectMapper.registerModule(new SimpleModule().addSerializer(String.class, new StringTrimmerSerializer()));
        converter.setObjectMapper(objectMapper);
        return converter;
    }

    @Override
    protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(mappingJackson2HttpMessageConverter());
        super.configureMessageConverters(converters);
    }

}
0 голосов
/ 23 марта 2020

Добавление конструкторов в StringTrimmerSerializer

  public StringTrimmerSerializer ()

  public StringTrimmerSerializer (Class<String> s) {
      super(s);
   }
...