使用注解@Validated和BindingResult对入参进行非空校验方式
注解@validated和bindingresult对入参非空校验
在项目当中少不了入参校验,服务器和浏览器互不信任,不能因为前端加入参判断了后台就不处理了,这样是不对的。
比如前台传过来一个对象作为入参参数,这个对象中有些属性允许为空,有些属性不允许为空。那么你还在使用if()else{}进行非空判断吗?不妨尝试下使用注解,可以使用@validated和bindingresult。
注意:bindingresult需要放到@validated后面
示例代码如下:普通属性可以用@notempty() 特殊的使用@notnull() 比如:枚举类型
实体类:什么不允许为空就加
@notempty(groups = {schooldto.schoolgroup.class},message = "学校名不能为空")
注意:重要的事情叮嘱两遍。public interface schoolgroup{} 别忘了加这个!public interface schoolgroup{} 别忘了加这个!
public class schooldto implements serializable { private long id; @notempty(groups = {schooldto.schoolgroup.class},message = "学校名不能为空") private string schoolname; @notnull @notempty(groups = {schooldto.schoolgroup.class},message = "学校负责人不能为空") private string schoolprincipal; @notnull @notempty(groups = {schooldto.schoolgroup.class},message = "职务不能为空") private string principalposition; @notnull @notempty(groups = {schooldto.schoolgroup.class},message = "联系电话不能为空") private string schoolphone; //getter setter tostring 省略 public interface schoolgroup{} 别忘了加这个 }
控制层:在入参对象上加@validated({schooldto.schoolgroup.class}), bindingresult bindingresult @validated进行验证,bindingresult可以获取校验错误信息
@postmapping("/schools") @preauthorize("hasrole(\"" + authoritiesconstants.admin + "\")") public map<string,object> createschool(@requestbody @validated({schooldto.schoolgroup.class}) schooldto schooldto,bindingresult bindingresult) throws exception { //返回校验错误信息 map<string,object>map=new hashmap<>(); if(bindingresult.haserrors()){ map.put("success","false"); map.put("message",bindingresult.getallerrors()); return map; } // .........业务省略 return map; } }
测试:入参的时候我没有传principalposition和schoolphone
@validated 和 bindingresult 使用遇到的坑
@validated 与bindingresult 需要相邻,否则 变量result 不能接受错误信息
控制台输出
field error in object 'entity' on field '变量': rejected value [null]; codes [notnull.entity.变量,notnull.变量,notnull.java.lang.string,notnull]; arguments [org.springframework.context.support.defaultmessagesourceresolvable: codes
正确的内容截图
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。