当前位置:   article > 正文

如何优雅地进行参数/实体字段验证???_java实体类校验

java实体类校验

 

你是否还在像下面那样进行判断参数是否合法

  1. //判断投诉内容是否为空
  2. if(StringUtil.isEmpty(complaint.getComplaintUpDes())){
  3. throw new BasicException(BasicErrorCode.DES_IS_NOT_EXIST.getLabel());
  4. }
  5. //判断楼栋单元门牌号是否为空
  6. if(StringUtil.isEmpty(complaint.getComplaintUpHome())){
  7. throw new BasicException(BasicErrorCode.HOME_IS_NOT_EXIST.getLabel());
  8. }

 在 Java 开发中,参数校验是一个非常重要的环节。为了避免程序出现不必要的异常和错误,我们需要对方法的参数进行校验。而在校验参数的过程中,使用注解可以帮助我们更加高效、准确地进行参数校验。

本文要介绍的方式是使用Java Bean Validation API(JSR 380):Java Bean Validation API是Java EE规范的一部分,它提供了一套注解,可以用来验证Java对象的属性值。例如,@NotNull注解可以用来验证属性值不为null,@Size注解可以用来验证字符串长度等。这种方法的优点是可以很容易地将参数验证与业务逻辑分离,并且提供了一种通用的验证方式。

首先导入依赖

  1. <dependency>
  2. <groupId>jakarta.validation</groupId>
  3. <artifactId>jakarta.validation-api</artifactId>
  4. <version>2.0.2</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter-validation</artifactId>
  9. </dependency>

具体使用 

可将以下注解加在实体类字段上 可在方法参数前加入

这些注解各大平台 有很多大佬分享解释 我这里就不过多赘述啦

 例如:

实体类字段上

  1. /** 上报人姓名 */
  2. @NotBlank(message = "上报人不能为空")
  3. private String complaintUpName ;
  4. /** 手机号 */
  5. @NotBlank(message = "手机号不能为空")
  6. @Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号码格式不正确")
  7. private String complaintUpPhone ;

方法参数前

  1. public void doSomething(@NotBlank String param) {
  2. // 参数 param 不为空,且不只包含空格
  3. }
  4. public void doSomething(@NotEmpty List<String> list) {
  5. // 参数 list 不为空
  6. }

然后在需要验证的接口上加上@Valid注解

  1. @PostMapping("/add")
  2. public String add(@RequestBody@Valid Complaint complaint){
  3. return complainService.insert(complaint);
  4. }

ok 测试一下

 这里 我们看到 检验已经生效 但是只是单纯地返回Bad Request 没有具体的信息

我们需要使用@ExceptionHandler注解来捕获这个异常,获取异常信息进行返回

  1. import org.springframework.http.HttpStatus;
  2. import org.springframework.http.ResponseEntity;
  3. import org.springframework.web.bind.MethodArgumentNotValidException;
  4. import org.springframework.web.bind.annotation.ControllerAdvice;
  5. import org.springframework.web.bind.annotation.ExceptionHandler;
  6. import javax.validation.ConstraintViolation;
  7. import javax.validation.ConstraintViolationException;
  8. import java.util.Date;
  9. import java.util.LinkedHashMap;
  10. import java.util.List;
  11. import java.util.Map;
  12. import java.util.stream.Collectors;
  13. @ControllerAdvice
  14. public class GlobalExceptionHandler {
  15. @ExceptionHandler(MethodArgumentNotValidException.class)
  16. public ResponseEntity<Object> handleValidationException(MethodArgumentNotValidException ex) {
  17. Map<String, Object> body = new LinkedHashMap<>();
  18. body.put("timestamp", new Date());
  19. body.put("status", HttpStatus.BAD_REQUEST.value());
  20. List<String> errors = ex.getBindingResult()
  21. .getFieldErrors()
  22. .stream()
  23. .map(x -> x.getDefaultMessage())
  24. .collect(Collectors.toList());
  25. body.put("errors", errors);
  26. return new ResponseEntity<>(body, HttpStatus.BAD_REQUEST);
  27. }
  28. }

再测试一下

测试成功!

使用这种方式进行参数校验的步骤相对简单,只需要在方法参数上添加相应的注解,然后在方法内部调用校验方法即可。在实际开发中,我们可以根据需要选择合适的注解进行参数校验,以提高代码的健壮性和可靠性。

感谢大家的阅读 希望对您有帮助!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/310863
推荐阅读
相关标签
  

闽ICP备14008679号