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

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

作者: 风静花犹落 | 来源:发表于2024-01-30 21:08 被阅读0次

    一、配置

    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;
        }
    
    }
    

    相关文章

      网友评论

          本文标题:SpringBoot去除请求参数中的表情符号和首尾空白字符

          本文链接:https://www.haomeiwen.com/subject/bsloodtx.html