记录一次参数校验的bug修改

记录一次修改参数校验的bug

bug描述:一个表单保存的接口,某个字段不能为空,不能包含表情,和空格。现在向这个字段输入了表情,待输入完后,前端做了去掉了空格、表情的操作。当只输入表情的时候,前端替换完再走的前端页面的非空校验。这时,前端的校验通过了。
然后后端接受到了这个值,也通过了非空等一系列的判断。最后保存入库,显示出来就是一个长度为1的空白的数据。
后端通过@NotEmpty,@NotNull,@NotSpace,@CantContainsEmoji注解加上了判断。后面两个注解自己实现的。
为了验证我把这个字段再日志中单独的打印了出来,用了各种方法去判断。尝试了几次后,发现这个字符串就是一个长度不为0的但是看不见的。后面我打印出来了它的unicode才发现这个坑。

1
replaceAll("\\p{Cf}","")

接收前端输入的时候,由于前端是富文本,去掉空格后,发现还是有字符串,但是看到的却是””,长度是1,但是人眼看到的是没有字符(0长度的),一直找不到原因。
后来网上查找资料发现了。原来是\u200b ((Zero width space) characters)遂去除。

1
js去除:str.replace(/\u200B/g,’’);

参考1

参考2

评论

:D 一言句子获取中...