前言
数据校验可以说是一个简单但是且繁琐的事情了,所以我找了一个方法,可以在定义对象时直接为加上参数校验。
步骤
依赖导入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
定义对象
给需要进行校验的加上@NotBlank注解,并注明错误信息
package com.llpy.textservice.entity.dto;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* 文章dto
*
* @author llpy
* @date 2024/07/12
*/
@Data
public class ArticleDto {
/**
* 文章id
*/
private Long articleId;
@NotBlank(message = "文章标题不能为空")
private String title;
/**
* 文章正文
*/
@NotBlank(message = "文章正文不能为空")
private String articleText;
/**
* 组id
*/
private Long groupId;
}
接口定义
加上@valid注解
@PostMapping("/addArticle")
public Result<?> addArticle(@Valid @RequestBody ArticleDto articleDto) {
return articleService.addArticle(articleDto, loginUser().getUserId());
}
定义一个全局异常处理器
package com.llpy.config;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.util.*;
import java.util.stream.Collectors;
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<String> handleValidationExceptions(MethodArgumentNotValidException ex) {
List<FieldError> collect = new ArrayList<>(ex.getBindingResult().getFieldErrors());
return ResponseEntity.status(HttpStatus.BAD_REQUEST)
.header("Content-Type", "text/plain; charset=UTF-8")
.body(collect.get(0).getDefaultMessage());
}
}
这样定义后,只要参数错误,就会抛出异常,全局处理器就会获取对应的错误信息,给前端进行返回。
总结
可以通过validation,优化参数校验的过程,使精力更多得放在业务处理上。