SpringBoot去除请求参数中的表情符号和首尾空白字符

一、配置

  1. 定义正则表达式
    /**
     * 正则静态常量
     */
    public interface PatternConstant {
    
        /**
         * 匹配表情符号
         **/
        Pattern EMOJI = Pattern.compile("[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]");
    
    }
    
  2. RequestBody 中 JSON 对象参数
    @Configuration
    public class JacksonConfig {
    
          @Bean
        public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
            return jacksonMapper -> jacksonMapper.deserializerByType(String.class, new StdScalarDeserializer<String>(String.class) {
                @Override
                public String deserialize(JsonParser jsonParser, DeserializationContext ctx) throws IOException {
                    String text = jsonParser.getValueAsString();
                    if (text == null) {
                        return null;
                    }
    
                    Matcher matcher = PatternConstant.EMOJI.matcher(text);
                    return matcher.replaceAll("").trim();
                }
    
            });
        }
        
    }
    
  1. URL 和 FORM 表单中的参数
    /**
     * 去除请求参数中的表情符号和首尾空白字符
     */
    @ControllerAdvice
    public class WebMvcAutoTrimEmojiConfig {
    
        
        @InitBinder
        public void initWebDataBinder(WebDataBinder binder) {
         //当值为" "时,是否转换为null
            StringTrimmerEditor propertyEditor = new StringTrimEmojiEditor(true);
             // 为 String 类对象注册编辑器
            binder.registerCustomEditor(String.class, propertyEditor);
        }
    
        public static class StringTrimEmojiEditor extends PropertyEditorSupport {
    
            /**
             * 当值为" "时,是否转换为null
             */
            private final boolean emptyAsNull;
    
            public StringTrimEmojiEditor(boolean emptyAsNull) {
                this.emptyAsNull = emptyAsNull;
            }
    
            @Override
            public void setAsText(@Nullable String text) {
                if (text == null) {
                    setValue(null);
                } else {
    
                    Matcher matcher = PatternConstant.EMOJI.matcher(text);
                    String value = matcher.replaceAll("").trim();
    
                    if (this.emptyAsNull && value.isEmpty()) {
                        super.setValue(null);
                    } else {
                        super.setValue(value);
                    }
                }
            }
    
            @Override
            public String getAsText() {
                Object value = getValue();
                return (value != null ? value.toString() : "");
            }
    
        }
    
    }
    

提示: 如果只去除首尾空白字符可以直接使用 org.springframework.beans.propertyeditors.StringTrimmerEditor

二、测试

@RestController
@RequestMapping(value = "/")
public class SpringTrimController {

    @GetMapping("/url")
    public String urlParam(String name) {
        return name;
    }

    @PostMapping("/form")
    public User formParam(User user) {
        return user;
    }

    @PostMapping(value = "/body")
    public User bodyParam(@RequestBody User user) {
        return user;
    }

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。