服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - 使用注解@Validated和BindingResult对入参进行非空校验方式

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

2022-02-26 00:46merge. Java教程

这篇文章主要介绍了使用注解@Validated和BindingResult对入参进行非空校验方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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

在项目当中少不了入参校验,服务器和浏览器互不信任,不能因为前端加入参判断了后台就不处理了,这样是不对的。

比如前台传过来一个对象作为入参参数,这个对象中有些属性允许为空,有些属性不允许为空。那么你还在使用if()else{}进行非空判断吗?不妨尝试下使用注解,可以使用@Validated和BindingResult

注意:BindingResult需要放到@Validated后面

示例代码如下:普通属性可以用@NotEmpty() 特殊的使用@NotNull() 比如:枚举类型

实体类:什么不允许为空就加

?
1
@NotEmpty(groups = {SchoolDTO.SchoolGroup.class},message = "学校名不能为空")

注意:重要的事情叮嘱两遍。public interface SchoolGroup{} 别忘了加这个!public interface SchoolGroup{} 别忘了加这个!

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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可以获取校验错误信息

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@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

延伸 · 阅读

精彩推荐
  • Java教程一篇文章带你了解spring事务失效的多种场景

    一篇文章带你了解spring事务失效的多种场景

    在日常编码过程中常常涉及到事务,在前两天看到一篇文章提到了Spring事务,那么在此总结下在Spring环境下事务失效的几种原因....

    苏三说技术3922021-12-20
  • Java教程微信支付java版本之JSAPI支付+发送模板消息

    微信支付java版本之JSAPI支付+发送模板消息

    这篇文章主要介绍了微信支付java版本之JSAPI支付,发送模板消息,感兴趣的小伙伴们可以参考一下 ...

    wangxuewei1113382020-06-02
  • Java教程Spring Boot学习入门之AOP处理请求详解

    Spring Boot学习入门之AOP处理请求详解

    AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术,下面这篇文章主要给大家...

    a6078288511852020-12-25
  • Java教程java 如何复制非空对象属性值

    java 如何复制非空对象属性值

    这篇文章主要介绍了java 如何复制非空对象属性值的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...

    zml_20159452021-12-14
  • Java教程详解Spring Boot 项目启动时执行特定方法

    详解Spring Boot 项目启动时执行特定方法

    这篇文章主要介绍了详解Spring Boot 项目启动时执行特定方法,Springboot给我们提供了两种“开机启动”某些方法的方式:ApplicationRunner和CommandLineRunner。感兴...

    月未明5962021-05-09
  • Java教程springboot后端解决跨域问题

    springboot后端解决跨域问题

    今天小编就为大家分享一篇关于springboot后端解决跨域问题,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看...

    双斜杠少年6842019-06-21
  • Java教程浅谈Java转义符\\|

    浅谈Java转义符\\|

    java中\需要用\\来表示吧这个你应该知道,而split中传入的参数是什么呢 他并不是普通的字符串 你可以查一下api文档 它要求传入的是正则表达式 而正则表达...

    hebedich6072019-12-23
  • Java教程Springboot使用test无法启动问题的解决

    Springboot使用test无法启动问题的解决

    这篇文章主要介绍了Springboot使用test无法启动问题的解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...

    weixin_4420203110702022-02-20