우리 spring
는 spring-boot-starter-validation
요청 을 확인하기 위해 백그라운드 에서 좋은 통합 확인 을 제공하는 도구 를 사용 합니다 .
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
일반적으로 사용되는 몇 가지 검사는 주석을 통해 여기에 캡슐화됩니다.
@NotNull
null 일 수 없습니다.@NotEmpty
null, 빈 문자열, 빈 컬렉션 일 수 없습니다.@NotBlank
null, 빈 문자열, 순수 공백 문자열 일 수 없습니다.@Min
숫자의 최소값은 x보다 작을 수 없습니다.@Max
최대 수는 x보다 클 수 없습니다.@Email
문자열은 메일 형식입니다.@Max
최대 수는 x보다 클 수 없습니다.@Size
최소 문자열 길이는 x이고 최소 콜렉션 길이는 x입니다.@Pattern
정규식
SysUser
예를 들어 사용 방법을 살펴 보겠습니다.
public class SysUser implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 用户ID
*
*/
@TableId
private Long userId;
/**
* 用户名
*/
@NotBlank(message="用户名不能为空")
@Size(min = 2,max = 20,message = "用户名长度要在2-20之间")
private String username;
/**
* 密码
*/
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private String password;
/**
* 邮箱
*/
@NotBlank(message="邮箱不能为空")
@Email(message="邮箱格式不正确")
private String email;
/**
* 手机号
*/
@Pattern(regexp="0?1[0-9]{10}",message = "请输入正确的手机号")
private String mobile;
/**
* 状态 0:禁用 1:正常
*/
private Integer status;
/**
* 用户所在店铺id
*/
private Long shopId;
/**
* 角色ID列表
*/
@TableField(exist=false)
private List<Long> roleIdList;
/**
* 创建时间
*/
private Date createTime;
}
Controller 레이어에서 빈을 사용하고 다음 @Valid
과 같이 검증 주석을 효과적으로 만들기 위해 주석을 사용합니다 SysUserController
.
@RestController
@RequestMapping("/sys/user")
public class SysUserController {
/**
* 保存用户
*/
@SysLog("保存用户")
@PostMapping
@PreAuthorize("@pms.hasPermission('sys:user:save')")
public ResponseEntity<String> save(@Valid @RequestBody SysUser user){
String username = user.getUsername();
SysUser dbUser = sysUserService.getOne(new LambdaQueryWrapper<SysUser>()
.eq(SysUser::getUsername, username));
if (dbUser!=null) {
return ResponseEntity.badRequest().body("该用户已存在");
}
user.setShopId(SecurityUtils.getSysUser().getShopId());
user.setPassword(passwordEncoder.encode(user.getPassword()));
sysUserService.saveUserAndUserRole(user);
return ResponseEntity.ok().build();
}
}
그리고 트리거 된 예외 정보를 DefaultExceptionHandlerConfig
가로 채서 @Valid
다음을 반환합니다.
@Controller
@RestControllerAdvice
public class DefaultExceptionHandlerConfig {
@ExceptionHandler(BindException.class)
public ResponseEntity<String> bindExceptionHandler(BindException e){
e.printStackTrace();
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(e.getBindingResult().getFieldErrors().get(0).getDefaultMessage());
}
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<String> methodArgumentNotValidExceptionHandler(MethodArgumentNotValidException e){
e.printStackTrace();
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(e.getBindingResult().getFieldErrors().get(0).getDefaultMessage());
}
}