Skip to content

如何优雅的把接口参数中的空白值替换为null值?

在spring 的文档中查阅到StringTrimmerEditor(https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans-beans) 可以实现**「Get」**方法时参数去除空格:

java
@ControllerAdvice
public class GlobalControllerAdiviceController {
    //WebDataBinder是用来绑定请求参数到指定的属性编辑器,可以继承WebBindingInitializer
    //来实现一个全部controller共享的dataBiner Java代码
    @InitBinder
    public void dataBind(WebDataBinder binder) {
        ///注册
        binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
    }
}

注意,StringTrimmerEditor构造方法中有一个参数,如果传入true,则会将空白转换为null. 这样前面写的StringEditor就不用了,spring 已经帮我们写好了。

java

public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
    return new Jackson2ObjectMapperBuilderCustomizer() {
        @Override
        public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {
            jacksonObjectMapperBuilder
                    .deserializerByType(String.class, new StdScalarDeserializer<String>(String.class) {
                        @Override
                        public String deserialize(JsonParser jsonParser, DeserializationContext ctx)
                                throws IOException {
                            // 重点在这儿:如果为空白则返回null
                            String value = jsonParser.getValueAsString();
                            if (value == null || "".equals(value.trim())) {
                                return null;
                            }
                            return value;
                        }
                    });
        }
    };
}

把上面的自定义StringDescrializer和MappingJackson2HttpMessageConverter去掉, 只保留上面的就行。

总访问量
总访问人数 人次