springboot + JSR303统一校验

原来的校验方式以及问题

在service层进行数据的判断,如果有许多的字段都做限制,导致写很多的if语句,代码臃肿,不美观。

if(StringUtils.isBlank(dto.getUsername())){
    
    
	throw new RuntimeException("用户名不能为空");
}

统一校验实现

1、引入依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-validation</artifactId>
</dependency>

2、在DTO实体类进行参数校验

@NotEmpty表示属性不能为空

@Data
@ApiModel(value="UserDto", description="新增用户")
public class UserDto{
    
    
	@NotEmpty(message = "用户名不能为空")
	private String username;
}

3、在controller方法中添加@Validated注解

@ApiOperation("新增用户信息")
@PostMapping("/createUser")
public Resp r(@RequestBody @Validated UserDto userDto){
    
    

}

4、统一异常返回

如果校验出错Spring会抛出MethodArgumentNotValidException异常,我们需要在统一异常处理器中捕获异常,解析出异常信息。

/**
处理JSR抛出的异常
**/
@ResponseBody
@ExceptionHandler(value = MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public RestErrorResponse doValidException(MethodArgumentNotValidException argumentNotValidException) {
    
    
	BindingResult bindingResult = argumentNotValidException.getBindingResult();
	StringBuffer errMsg = new StringBuffer();
	List<FieldError> fieldErrors = bindingResult.getFieldErrors();
	fieldErrors.forEach(error -> {
    
    
		errMsg.append(error.getDefaultMessage()).append(",");
	});
	log.error(errMsg.toString());
	return new RestErrorResponse(errMsg.toString());
}

分组校验

有的修改要求不能为空,而新增可以为空,使用分组的方式解决。

1、定义不同的分组

插入的组,修改的组,删除的组

public class ValidationGroups {
    
    
	public interface Insert{
    
    };
	public interface Update{
    
    };
	public interface Delete{
    
    };
}

2、实体类定义不同的分组校验

@NotEmpty(groups = {
    
    ValidationGroups.Insert.class},message = "添加用户名不能为空")
@NotEmpty(groups = {
    
    ValidationGroups.Update.class},message = "修改用户名不能为空")
private String name;

3、在Controller方法中启动校验规则指定要使用的分组名:

@ApiOperation("新增用户信息")
@PostMapping("/createUser")
public Resp r(@RequestBody @Validated({
    
    ValidationGroups.Insert.class})UserDto userDto){
    
    
	
}

常用的校验注解

在这里插入图片描述

结束!!!!!!!
hy:4


					凡事需多听但少言;聆听他人之意见,但保留自己之判断。---莎士比亚

猜你喜欢

转载自blog.csdn.net/weixin_49107940/article/details/130913146