1、問題
避免前端輸入的字符串參數兩端包含空格,通過統一處理的方式,trim掉空格
2、實現方式
/*** 去除字符串類型參數的前后空格* @author yanlei* @since 2022-06-14*/
@Configuration
@AutoConfigureAfter(WebMvcAutoConfiguration.class)
public class StringParamTrimConfig {@ControllerAdvicepublic static class ControllerStringParamTrimConfig {/*** url和form表單中的參數trim*/@InitBinderpublic void initBinder(WebDataBinder binder) {// 構造方法中boolean參數含義為如果是空白字符串,是否轉換為null// 即如果為true,那么 "" 會被轉換為null,否則為 ""StringTrimmerEditor stringTrimmerEditor = new StringTrimmerEditor(false);binder.registerCustomEditor(String.class, stringTrimmerEditor);}}/*** Request Body中JSON或XML對象參數trim*/@Beanpublic Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {return jacksonObjectMapperBuilder ->jacksonObjectMapperBuilder.deserializerByType(String.class, new StdScalarDeserializer<String>(String.class) {@Overridepublic String deserialize(JsonParser jsonParser, DeserializationContext ctx) throws IOException {return StringUtils.trimWhitespace(jsonParser.getValueAsString());}});}
}
說明:
@AutoConfigureAfter(WebMvcAutoConfiguration.class) : 表示該配置類在 WebMvcAutoConfiguration (Spring MVC 的自動配置類 )之后進行配置,確保在 Spring MVC 相關配置完成后再進行字符串參數處理配置,防止因依賴問題導致配置失效。
@ControllerAdvice :對所有控制器提供通用功能,@ControllerAdvice 可以與其他注解如 @ExceptionHandler、@ModelAttribute、@InitBinder 等一起使用,處理異常、共享模型數據、進行數據綁定等。這里用于統一處理字符串參數的操作。可參考https://blog.csdn.net/weixin_44594317/article/details/144723619
@InitBinder 注解的 initBinder 方法 :
- WebDataBinder 是 Spring MVC 用于數據綁定的核心類,負責將請求參數綁定到 Java 對象。
- StringTrimmerEditor 是自定義的屬性編輯器,構造函數參數 false 表示當字符串為空白時,不將其轉換為 null ,而是保留空字符串。
- binder.registerCustomEditor(String.class, stringTrimmerEditor) 這行代碼將自定義的 StringTrimmerEditor 注冊到 WebDataBinder 中,作用是在將請求參數綁定到 Java 對象時,對所有 String 類型參數自動去除前后空格 。