spring - boot - starter - validation 상용 검사 주해
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-validationartifactId>
dependency>
상용 주해
타 입 을 틀 리 지 않도록 주의 하 세 요!
주해
제한 하 다.
@Null
null 로 만 제한
@NotNull
null
@AssertFalse
false 로 제한
@AssertTrue
트 루 로 제한
@DecimalMax(value)
지정 한 값 보다 크 지 않 은 숫자 로 제한 해 야 합 니 다.
@DecimalMin(value)
지정 한 값 보다 작 지 않 은 숫자 로 제한 해 야 합 니 다.
@Digits(integer,fraction)
제한 은 하나의 소수 로 해 야 하 며, 정수 부분의 자릿수 는 integer 를 초과 해 서 는 안 되 며, 소수 부분의 자릿수 는 fraction 을 초과 해 서 는 안 된다.
@Future
제한 은 반드시 미래의 날짜 여야 한다.
@Max(value)
지정 한 값 보다 크 지 않 은 숫자 로 제한 해 야 합 니 다.
@Min(value)
지정 한 값 보다 작 지 않 은 숫자 로 제한 해 야 합 니 다.
@Past
제한 은 반드시 과거의 날짜 여야 한다.
@Pattern(value)
지정 한 정규 표현 식 문자열 에 부합 해 야 함 을 제한 합 니 다.
@Size(max,min)
문자 길 이 를 제한 하려 면 min 에서 max 사이 [숫자 가 아 닙 니 다]
@Past
주 해 를 검증 하 는 요소 값 (날짜 형식) 이 현재 시간 보다 빠 릅 니 다.
@NotEmpty
주 해 를 검증 하 는 요소 값 은 null 이 아니 라 비어 있 지 않 습 니 다 (문자열 길이 0 이 아 닙 니 다. 집합 크기 는 0 이 아 닙 니 다)
@NotBlank
주 해 를 검증 하 는 요소 값 은 비어 있 지 않 습 니 다 (null 이 아 닙 니 다. 첫 번 째 빈 칸 을 제거 한 후 길 이 는 0 입 니 다). @ NotEmpty 와 달리 @ NotBlank 는 문자열 에 만 적용 되 며 비교 할 때 문자열 의 빈 칸 을 제거 합 니 다.
주 해 를 검증 하 는 요소 값 은 Email 이 며 정규 표현 식 과 flag 를 통 해 사용자 정의 email 형식 을 지정 할 수 있 습 니 다.
@Length(min = 6, max = 16)
들 어 오 는 문자열 의 길 이 를 지정 합 니 다.
사용 할 때:
우선 실체 류 에 검 증 된 주 해 를 넣 습 니 다.
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("user")
public class User implements Serializable {
private static final long serialVersionUID = -5577261004651495987L;
@TableId(type = IdType.AUTO)
private Integer userId;
@NotEmpty
@Length(min = 6, max = 16, message = " ") //@Length
private String password;
private Integer role;
private String salt;
/**
*
*/
@Email(regexp = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$")
@NotNull
private String email;
private Date registerTime;
@Override
public String toString() {
String ret = null;
ObjectMapper mapper = new ObjectMapper();
try {
ret = mapper.writeValueAsString(this);
} catch (Exception e) {
e.printStackTrace();
}
return ret;
}
}
그리고 사용자 대상 을 받 을 때
@Valid
또는 @Validated
주 해 를 추가 합 니 다.메모: spring 이 제공 하 는 인증: org. springframework. vaidation. annotation. Validated;javax 가 제공 하 는 인증: javax. validation. Valid; @Valid 와 @ Validated 는 모두 한 번 의 검 사 를 촉발 하 는 데 사 용 됩 니 다. @ Valid 는 JSR 303 규범 의 주해 입 니 다. @ Validated 는 Spring 강화 판 의 주해 입 니 다. 강 화 된 부분 은 @ Validated 지원 그룹 서열 입 니 다. 이 특성 은 @ Validated 주 해 를 적 게 사용 하 는 것 을 추천 합 니 다.
일치 하지 않 는 상황 을 포착 할 수 있 는 몇 가지 방법 이 있 습 니 다.
방법 1: 전역 이상 포획
@PostMapping("/login")
public RetJson<Object> login(@Valid @RequestBody User user){
...
}
전역 이상 을 사용 하여 오류 정 보 를 되 돌려 줍 니 다 (실체 클래스 에 적 힌 message 정보 입 니 다)
@RestControllerAdvice
@Slf4j
public class ExceptionResolver {
/**
*
*/
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(value = {
MethodArgumentNotValidException.class})
public RetJson methodArgumentNotValidExceptionHandler(MethodArgumentNotValidException e) {
log.error("------->MethodArgumentNotValidException -------- ", e);
return RetJson.fail(ResultCode.VALIDATE_FAILED.getCode(), " "+e.getBindingResult().getFieldError().getDefaultMessage());
//getDefaultMessage() message
}
}
두 번 째: 방법 적 으로 직접 처리
실체 클래스 전 참 시
BindingResult
주 해 를 추가 합 니 다.또한 주의
BindingResult
@ ModelAttribute 의 뒤 를 따라 가 야 합 니 다. 예 를 들 어: Public String add (@ Valid RoleBO role, Binding Result binding, Map request)public String add (@ Valid RoleBO role, Map request), BindingResult result) 에 다음 과 같이 쓰 면 이상 이 발생 합 니 다. java. lang. IllegalState 예외: An Errors / BindingResult argument is expected to be declared immediately after the model attribute, the @ RequestBody or the @ RequestPart arguments to which they apply:
사실 과정 은:
@PostMapping("/login")
public RetJson<Object> login(@Valid @RequestBody User user, BindingResult result){
if (result.hasErrors()) {
log.error("[login] :User={}", user);
String s = result.getFieldError().getDefaultMessage();
throw new BaseException(ResultCode.VALIDATE_FAILED.getCode(), s);
}
...
}
이렇게 하면 message 의 잘못된 정 보 를 직접 되 돌 릴 수 있다.
방법 3: 도구 류
도구 클래스 를 써 서 일치 하지 않 는 상황 이 있 는 지 판단 합 니 다.
public class ValidatedUtil {
private static Validator validator=
Validation.byProvider(HibernateValidator.class).configure().failFast(true).buildValidatorFactory().getValidator();
public static<T> Boolean validate(T v){
Set<ConstraintViolation<T>> set= validator.validate(v);
return set.size() == 0;
}
public static void validData(BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
StringBuilder sb = new StringBuilder();
for (ObjectError error : bindingResult.getAllErrors()) {
sb.append(error.getDefaultMessage());
}
throw new BaseException(ResultCode.VALIDATE_FAILED.getCode(), sb.toString());
}
}
}
물론 단일 매개 변수 도 직접 사용 할 수 있다.
@GetMapping("/getEmailCode")
public RetJson<Object> getEmailCode(
@RequestParam("email") @Valid
@Email(regexp = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$", message = " ") String email) {
// MethodArgumentNotValidException
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.