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

作者:merge. 时间:2022-09-16 11:30:44 

注解@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对入参进行非空校验方式

来源:https://blog.csdn.net/weixin_43770545/article/details/90237097

标签:@Validated,BindingResult,非空校验
0
投稿

猜你喜欢

  • JAVA基础之注解与反射的使用方法和场景

    2022-02-23 19:50:00
  • Java如何实现自定义异常类

    2023-06-21 23:44:01
  • SpringBoot超详细讲解@Value注解

    2022-03-06 12:05:36
  • 解读List list=new ArrayList()是怎么回事

    2022-04-17 12:28:22
  • 一文带你了解SpringBoot的启动原理

    2023-11-28 20:44:42
  • SpringBoot整合RedisTemplate实现缓存信息监控的步骤

    2023-10-14 10:17:13
  • Java设计模式之享元模式示例详解

    2022-12-08 22:19:46
  • @CacheEvict 清除多个key的实现方式

    2023-11-21 08:28:04
  • Java单例模式下的MongoDB数据库操作工具类

    2023-11-20 12:55:01
  • java 读取本地文件实例详解

    2023-08-12 20:41:32
  • maven的pom文件与打包详解

    2023-12-24 00:23:51
  • Java开发中synchronized的定义及用法详解

    2021-11-11 07:01:20
  • Spring @ComponentScan注解扫描组件原理

    2021-09-21 09:10:02
  • 简单探索 Java 中的惰性计算

    2023-11-16 20:25:28
  • JavaWeb工程中集成YMP框架快速上手

    2023-11-24 12:15:12
  • Android中如何指定SnackBar在屏幕的位置及小问题解决

    2023-08-07 07:56:19
  • SpringBoot结合Redis配置工具类实现动态切换库

    2022-04-15 14:14:13
  • java实现微信扫码支付功能

    2023-11-09 18:38:08
  • java中pdf转图片的实现方法

    2021-07-22 02:26:06
  • java web实现邮箱激活与忘记密码

    2023-11-18 09:35:26
  • asp之家 软件编程 m.aspxhome.com