Java 프로젝트의 통합 검증

우리 springspring-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());
    }
}

추천

출처blog.csdn.net/lmsfv/article/details/106068610