大量if else判断如何优化?@Valib详解

1、业务场景

 

@RequestMapping("/insert")
    public String insert(Student student){
        if(Objects.equals(student.getName(),"")){
            return "姓名不能为空";
        }
        if(null == student.getAge()){
            return "年龄不能为空";
        }
        return "success";
    }

如图所示,当前端访问接口时,现在要求参数不能为空,那我们只能这样写两个if判断是否为null。若name访问为空时候,则会如图返回

目前现在只有两个字段,若有大量的字段需要判断则如何呢,写大量的if?当一个接口里无效业务代码量过多,设计是有问题的,而且作为一个优秀的程序员,这不是我们想看到的结果。

如何解决呢?答案是@Valid的由来

 @RequestMapping("/insert")
    public String insert(@Valid Student student, BindingResult bindingResult){
        if(bindingResult.hasErrors()){
            return bindingResult.getAllErrors().get(0).getDefaultMessage();
        }
        //业务处理
        return "success";
    }


@Data
public class Student {

    @NotBlank(message = "姓名不能为空")
    @Length(message = "姓名不超过{max}个字符", max = 5)
    private String name;

    @NotNull(message = "年龄不能为空")
    @Range(message = "年龄在{min}到{max}之间", min = 0, max = 10)
    private Integer age;

    @NotEmpty(message = "学生课程不能为空")
    @Size(message = "每个学生最多选择{max}节课",max = 5)
    private List<String> courseList;
}

从代码里可以看到,首先接收的bean对象需要用@valid注解验证,之后需要注意的是,bean里面

数字类型用@NotNull注解,字符串类型用@NotBlank注解,集合类型用的是@NotEmpty判断是否存在。他们判断长度的注解也不同,分别是@Length,@Range,@Size。

这里完成之后,此刻并不会返回前端提示什么字段为空,还需要在接口加BindingResult参数,接收异常数据,返回空字段给前端。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后端从入门到精通

你的鼓励是我最大的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值