小蚂蚁 发表于 2022-2-26 10:40:07

使用注解@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 需要相邻,否则 变量result 不能接受错误信息
控制台输出

Field error in object 'entity' on field '变量': rejected value ; codes ; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes
正确的内容截图

以上为个人经验,希望能给大家一个参考,也希望大家多多支持CodeAE代码之家。
原文链接:https://blog.csdn.net/weixin_43770545/article/details/90237097

http://www.zzvips.com/article/227316.html
页: [1]
查看完整版本: 使用注解@Validated和BindingResult对入参进行非空校验方式