温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》
  • 首页 > 
  • 教程 > 
  • 开发技术 > 
  • 如何使用注解@Validated和BindingResult对入参进行非空校验方式

如何使用注解@Validated和BindingResult对入参进行非空校验方式

发布时间:2021-10-25 18:27:30 来源:亿速云 阅读:231 作者:iii 栏目:开发技术

本篇内容主要讲解“如何使用注解@Validated和BindingResult对入参进行非空校验方式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用注解@Validated和BindingResult对入参进行非空校验方式”吧!

目录
  • 注解@Validated和BindingResult对入参非空校验

  • @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 使用遇到的坑

@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

正确的内容截图

如何使用注解@Validated和BindingResult对入参进行非空校验方式

以上为个人经验,希望能给大家一个参考,也希望大家多多支持亿速云。

到此,相信大家对“如何使用注解@Validated和BindingResult对入参进行非空校验方式”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI