Spring 引导通用字符串 trim 序列化

Spring boot generic String trim Serialization

我正在尝试跨应用程序实现通用 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; }
     */
}

主要 Class 包:com.demo 序列化程序包:com.demo.config

Spring 引导版本 - 2.2.5.RELEASE 杰克逊数据绑定 - 2.10.2

在 StringTrimmerSerializer 中添加构造函数

  public StringTrimmerSerializer ()

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

我能够通过将自定义序列化器注册到 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);
    }

}