springboot 검사 프레임 워 크 vaidation 검 사 를 사용 하 는 예제

5707 단어 springbootvalidation
b/s 시스템 에서 http 요청 데이터 에 대한 검 사 는 대부분 클 라 이언 트 에서 이 루어 집 니 다.이것 은 간단 하고 사용자 체험 성 을 고려 하기 때 문 입 니 다.그러나 일부 안전성 요구 가 높 은 시스템 에서 서버 검사 가 없어 서 는 안 됩 니 다.
Spring 3 은 JSR-303 검증 프레임 워 크 를 지원 합 니 다.JSR-303 은 자바 EE 6 의 하위 규범 으로 BeanValidation 이 라 고 합 니 다.공식 참고 실현 은 hibenate Validator(Hibernate ORM 과 관계 가 없 음)이 고 JSR 303 은 자바 Bean 의 필드 값 을 검증 하 는 데 사 용 됩 니 다.
Validator 는 주로 사용자 가 제출 한 데이터 의 합 리 성 을 검증 합 니 다.예 를 들 어 비어 있 는 지,비밀번호 길이 가 6 자리 이상 인지,순수한 숫자 인지 등 입 니 다.그럼 spring boot 에 서 는 어떻게 이렇게 강력 한 검사 프레임 워 크 를 사용 합 니까?
vaidation 과 springboot 결합
1.bean 에 탭 추가
부분 코드:
탭 은 속성 에 추가 해 야 합 니 다.@NotBlank 탭 의 의미 문장 끝 에 설명 이 있 습 니 다.

public class User {
  private Integer id;
  @NotBlank(message = "{user.name.notBlank}")
  private String name;
  private String username;
2.컨트롤 러 에서 인증 오픈
Controller 에서 요청 한 인자 에@Validated 탭 을 추가 하여 인증 을 시작 합 니 다.

  @RequestMapping(method = RequestMethod.POST)
  public User create(@RequestBody @Validated User user) {
    return userService.create(user);
  }
3.resource 에서 새 오류 정보 설정 파일
resource 디 렉 터 리 에 새 알림 정보 설정 파일"ValidationMessages.properties"
메모:이름 은"ValidationMessages.properties"여야 합 니 다.SpringBoot 는 classpath 의 ValidationMessages.properties 의 오류 정 보 를 자동 으로 읽 기 때 문 입 니 다.
ValidationMessages.properties 파일 의 인 코딩 은 ASCII 입 니 다.데이터 형식 은 key value 입 니 다.key"user.name.notBlank"는 첫 번 째 bean 의 태그 괄호 안에 message 에 대응 하 는 값 입 니 다.
value 는 알림 정보 이지 만 ASCII 입 니 다.(이름 이 비어 있 으 면 안 된다 는 내용)

4.이상 처리 기 를 사용자 정의 하여 오류 정 보 를 캡 처 합 니 다.
인증 이 통과 되 지 않 을 때 이상 한 메시지 가 표 시 됩 니 다.이상 한 메시지 가 ValidationMessages.properties 에 설 정 된 알림 정보 입 니 다.이상 처리 장 치 를 정의 합 니 다.이상 정 보 를 캡 처 합 니 다.이 곳 은 전후 단 분리 개발)

  public void MethodArgumentNotValidException(Exception ex, HttpServletRequest request, HttpServletResponse response) {
    logger.error( ":" + CommonUtil.getHttpClientInfo(request), ex);
    MethodArgumentNotValidException c = (MethodArgumentNotValidException) ex;
    List<ObjectError> errors =c.getBindingResult().getAllErrors();
    StringBuffer errorMsg=new StringBuffer();
    errors.stream().forEach(x -> errorMsg.append(x.getDefaultMessage()).append(";"));
    pouplateExceptionResponse(response, HttpStatus.INTERNAL_SERVER_ERROR, errorMsg.toString());
  }


 private void pouplateExceptionResponse(HttpServletResponse response, HttpStatus errorCode, String errorMessage) {
    try {
      response.sendError(errorCode.value(), errorMessage);
    } catch (IOException e) {
      logger.error("failed to populate response error", e);
    }
  }

5.일부 라벨 의 의 미 를 첨부
제한 하 다.
설명 하 다.
@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
주 해 를 검증 하 는 요소 값 은 Email 이 며 정규 표현 식 과 flag 를 통 해 사용자 정의 email 형식 을 지정 할 수 있 습 니 다.
예시

 @Pattern(regexp="^[a-zA-Z0-9]+$",message="{account.username.space}")
 @Size(min=3,max=20,message="{account.username.size}")
예시 2
여기 서 우 리 는 주로 주 해 를 사용 하여 공 부 를 한다.우리 가 먼저 우리 의 요 구 를 말 하 자.
우 리 는 demo.html 가 있 습 니 다.페이지 에 두 개의 요소 이름 입력 상자,비밀번호 입력 라 이브 러 리,제출 버튼 이 있 습 니 다.
백 엔 드 에 제출 한 후 Validator 를 사용 하여 검사 한 다음 오류 가 발생 하면 demo.html 로 전송 합 니 다.
사용자 의 입력 을 받 을 실체 클래스 를 만 들 고 Validator 주석 을 사용 하여 검사 합 니 다.

package com.kfit.demo;
 
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotEmpty; 
public class Demo {  
  private long id; 
  @NotEmpty(message="      ")
  private String name;  
  @NotEmpty(message="      ")
  @Length(min=6,message="        6 ")
  private String password;
 
  publiclong getId() {
    return id;
  }
 
  publicvoid setId(longid) {
    this.id = id;
  }
 
  public String getName() {
    return name;
  }
 
  public void setName(String name) {
    this.name = name;
  }
 
  public String getPassword() {
    return password;
  }
 
  public void setPassword(String password) {
    this.password = password;
  }
 
  @Override
  public String toString() {
    return "Demo [id=" + id + ", name=" + name + ", password=" + password + "]";
  }
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기