下面是关于SpringBoot替换if的参数校验示例代码的完整攻略。
什么是参数校验
参数校验是指对输入参数的正确性进行检查,以保证系统可以正常的运行,常见的校验项包括非空校验、数据格式校验、数据范围校验等。
传统的参数校验方式
传统的参数校验是通过if或者switch等条件语句实现的,例如:
public boolean check(String name, int age) {
if (name == null || name.isEmpty() || age <= 0 || age >= 120) {
return false;
}
return true;
}
当参数比较少时,if语句还比较好维护,但是当参数增多时,会导致代码臃肿,可读性差,且容易出错。
SpringBoot的参数校验方式
SpringBoot提供了一种更加优雅的参数校验方式,通过注解来替代if语句的逻辑处理。具体的实现方式如下:
- 在pom.xml文件中添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
- 在Controller中定义需要校验参数的方法,并添加@Valid注解:
@PostMapping("/user")
public void addUser(@Valid @RequestBody User user) {
userService.addUser(user);
}
- 在需要校验的入参上添加注解,例如:
public class User {
@NotBlank(message = "name不能为空")
private String name;
@Min(value = 1, message = "age最小值为1")
@Max(value = 120, message = "age最大值为120")
private int age;
// getter and setter
}
其中,@NotBlank、@Min、@Max都是Spring提供的注解,可根据需要选择相应的注解。
- 如果出现校验不通过的情况,Spring会抛出MethodArgumentNotValidException异常,我们可以通过定义ExceptionHandler方法来处理该异常,例如:
@ExceptionHandler(MethodArgumentNotValidException.class)
public void handleException(MethodArgumentNotValidException e) {
BindingResult bindingResult = e.getBindingResult();
String errorMsg = bindingResult.getAllErrors().get(0).getDefaultMessage();
throw new RuntimeException(errorMsg);
}
通过这种方式,就可以解决传统方式下代码臃肿,可读性差的问题,同时也可以提高代码的可维护性。
两个示例
接下来,我将给出两个示例来演示如何使用SpringBoot的参数校验方式。
示例1:验证邮箱地址
public class User {
@NotBlank(message = "邮箱地址不能为空")
@Email(message = "邮箱地址格式不正确")
private String email;
// getter and setter
}
在上面的代码中,@NotBlank注解是用来校验邮箱地址是否为空的,@Email注解是用来校验邮箱地址格式是否正确的。当参数校验不通过时,会抛出MethodArgumentNotValidException异常,并将异常信息封装在BindingResult对象中。
示例2:验证日期
public class User {
@NotNull(message = "生日不能为空")
private LocalDate birthDay;
// getter and setter
}
@PostMapping("/user")
public void addUser(@Valid @RequestBody User user) {
userService.addUser(user);
}
@ExceptionHandler(MethodArgumentNotValidException.class)
public void handleException(MethodArgumentNotValidException e) {
BindingResult bindingResult = e.getBindingResult();
String errorMsg = bindingResult.getAllErrors().get(0).getDefaultMessage();
throw new RuntimeException(errorMsg);
}
在上述代码中,@NotNull注解是用来校验生日是否为空的,当生日为空时,会抛出MethodArgumentNotValidException异常。
通过以上两个示例的演示,我们可以看到SpringBoot的参数校验方式非常简洁和优雅,不但提高了代码的可读性和维护性,而且避免了传统的if语句所带来的问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot 替换 if 的参数校验示例代码 - Python技术站