前言
ps:在接收
String
类型参数时,前后可能存在一些空格,如果未曾去除就直接保存的话,可能会对一些特殊的业务场景造成致命影响。为了杜绝这种情况,需要在接收参数时进行前后空格清除处理
1. 配置
1.1 接收 url 或 form 表单中的参数(get请求
)
对于这种情况,Spring MVC 提供了一个 org.springframework.beans.propertyeditors.StringTrimmerEditor
类,我们只需要在参数绑定中进行注册就行,方式如下
// 必须标记 @ControllerAdvice
@ControllerAdvice
public class ControllerStringParamTrimConfig {
@InitBinder
public void initBinder(WebDataBinder binder) {
StringTrimmerEditor stringTrimmerEditor = new StringTrimmerEditor(true);
binder.registerCustomEditor(String.class, stringTrimmerEditor);
}
}
1.2 接收Request Body中JSON或XML对象参数(post请求
)
Spring MVC 是使用 Jackson 对参数进行反序列化,所以对于 String 的处理是在 Jackson 中配置
@Bean
public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer2() {
return jacksonObjectMapperBuilder -> {
// 为 String 类型自定义反序列化操作
jacksonObjectMapperBuilder
.deserializerByType(String.class, new StdScalarDeserializer<String>(String.class) {
@Override
public String deserialize(JsonParser jsonParser, DeserializationContext ctx)
throws IOException {
// 去除前后空格
String data = StringUtils.trimWhitespace(jsonParser.getValueAsString());
// 如果为空返回 null
return StrUtil.isBlank(data) ? null : data;
}
});
};
}
2. 测试
2.1 Controller
@RestController
public class SpringTrimController {
@GetMapping("/url")
public String urlParam(