赞
踩
你是否还在像下面那样进行判断参数是否合法
- //判断投诉内容是否为空
- if(StringUtil.isEmpty(complaint.getComplaintUpDes())){
- throw new BasicException(BasicErrorCode.DES_IS_NOT_EXIST.getLabel());
- }
- //判断楼栋单元门牌号是否为空
- if(StringUtil.isEmpty(complaint.getComplaintUpHome())){
- throw new BasicException(BasicErrorCode.HOME_IS_NOT_EXIST.getLabel());
-
- }
在 Java 开发中,参数校验是一个非常重要的环节。为了避免程序出现不必要的异常和错误,我们需要对方法的参数进行校验。而在校验参数的过程中,使用注解可以帮助我们更加高效、准确地进行参数校验。
本文要介绍的方式是使用Java Bean Validation API(JSR 380):Java Bean Validation API是Java EE规范的一部分,它提供了一套注解,可以用来验证Java对象的属性值。例如,@NotNull注解可以用来验证属性值不为null,@Size注解可以用来验证字符串长度等。这种方法的优点是可以很容易地将参数验证与业务逻辑分离,并且提供了一种通用的验证方式。
首先导入依赖
- <dependency>
- <groupId>jakarta.validation</groupId>
- <artifactId>jakarta.validation-api</artifactId>
- <version>2.0.2</version>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-validation</artifactId>
- </dependency>
具体使用
可将以下注解加在实体类字段上 可在方法参数前加入
这些注解各大平台 有很多大佬分享解释 我这里就不过多赘述啦
例如:
实体类字段上
- /** 上报人姓名 */
- @NotBlank(message = "上报人不能为空")
- private String complaintUpName ;
- /** 手机号 */
- @NotBlank(message = "手机号不能为空")
- @Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号码格式不正确")
- private String complaintUpPhone ;
方法参数前
- public void doSomething(@NotBlank String param) {
- // 参数 param 不为空,且不只包含空格
- }
-
- public void doSomething(@NotEmpty List<String> list) {
- // 参数 list 不为空
- }
然后在需要验证的接口上加上@Valid注解
- @PostMapping("/add")
- public String add(@RequestBody@Valid Complaint complaint){
- return complainService.insert(complaint);
- }
ok 测试一下
这里 我们看到 检验已经生效 但是只是单纯地返回Bad Request 没有具体的信息
我们需要使用@ExceptionHandler注解来捕获这个异常,获取异常信息进行返回
- import org.springframework.http.HttpStatus;
- import org.springframework.http.ResponseEntity;
- import org.springframework.web.bind.MethodArgumentNotValidException;
- import org.springframework.web.bind.annotation.ControllerAdvice;
- import org.springframework.web.bind.annotation.ExceptionHandler;
-
- import javax.validation.ConstraintViolation;
- import javax.validation.ConstraintViolationException;
- import java.util.Date;
- import java.util.LinkedHashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.stream.Collectors;
-
-
- @ControllerAdvice
- public class GlobalExceptionHandler {
- @ExceptionHandler(MethodArgumentNotValidException.class)
- public ResponseEntity<Object> handleValidationException(MethodArgumentNotValidException ex) {
- Map<String, Object> body = new LinkedHashMap<>();
- body.put("timestamp", new Date());
- body.put("status", HttpStatus.BAD_REQUEST.value());
-
- List<String> errors = ex.getBindingResult()
- .getFieldErrors()
- .stream()
- .map(x -> x.getDefaultMessage())
- .collect(Collectors.toList());
-
- body.put("errors", errors);
-
- return new ResponseEntity<>(body, HttpStatus.BAD_REQUEST);
- }
-
-
-
- }

再测试一下
测试成功!
使用这种方式进行参数校验的步骤相对简单,只需要在方法参数上添加相应的注解,然后在方法内部调用校验方法即可。在实际开发中,我们可以根据需要选择合适的注解进行参数校验,以提高代码的健壮性和可靠性。
感谢大家的阅读 希望对您有帮助!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。