springboot+dubbo+vaidation rpc 매개 변수 검증 실현 방법

주의:본문 dubbo 버 전 2.8.4 springboot 버 전 2.0.4.RELEASE
프로젝트 구조
  • test-rest(전단 소비,controller 층,springboot+maven 프로젝트)
  • test-api(dubbo 서비스의 api,service 인터페이스 와 model,maven 프로젝트 만 기록)
  • test-provider(dubbo 서비스 제공 자,실제 데이터베이스 조작 및 업무 층,springboot+maven 프로젝트)
  • 배경:
    springmvc 를 restful 로 사용 하고,dubbo 를 rpc 로 사용 하 며,restful 에서 대량의 rpc 를 호출 합 니 다.데이터 검증 은 이 두 곳 에 있 습 니 다.하 나 는 restful 차원 이 고,하 나 는 rpc 차원 입 니 다.restful 차원 은 springmvc 의 기본 통합 hibenate-vaidator 를 사용 하여 이 루어 집 니 다.매개 변수 오픈 검증 은@Validated param 만 추가 해 야 합 니 다.dubbo rpc 검사 사용 하기
    dubbo rpc 차원 에서 사용 하 는 것 은 JSR 303 표준 주해 검증 입 니 다.hibenate-vaidator 를 통 해 이 루어 집 니 다.dubbo 에서 vaidation 을 여 는 데 도 두 가지 방식 이 있 습 니 다.하 나 는 consumer 단 이 고 하 나 는 provider 단 입 니 다.
    dubbo 서버 검 사 를 시작 할 때 dubbo 서 비 스 를 호출 할 때 서버 에서 매개 변수 검 사 를 하고 consumer 에서 도 검 사 를 시작 하면 서 비 스 를 호출 할 때 consumer 에서 도 검 사 를 합 니 다.
    dubbo rpc 검사(서버 오픈)
    우선 dobbo 의 rpc 층 검 사 를 설정 합 니 다.
    1.의존 도입,
    
     <dependency>
          <groupId>javax.validation</groupId>
          <artifactId>validation-api</artifactId>
        </dependency>
        <dependency>
          <groupId>org.hibernate.validator</groupId>
          <artifactId>hibernate-validator</artifactId>
        </dependency>
    
    2.api model 에 주석 추가
    
    import javax.validation.constraints.Min;
    import javax.validation.constraints.NotEmpty;
    import javax.validation.constraints.Pattern;
    import java.io.Serializable;
    
    public class UserSaveArgs implements Serializable {
    
      private static final long serialVersionUID = -5457103531947646047L;
      @NotEmpty(
          message = "       ")
      @Pattern(regexp = Constants.USERNAME_PATTERN, message = "       ")
      private String userName;
      @NotEmpty(
          message = "       ")
      @Pattern(regexp = Constants.PHONTE_NUMBER_PATTERN, message = "         ")
      private String phoneNumber;
      @NotNull(
          message = "      ")
      @Min(value = 0, message = "      0")
      private Integer age;
      
      //get set   
    dubbo 프로필 provider.xml 에서 검증 vaidation="true"를 엽 니 다.
    
      <dubbo:provider delay="-1" timeout="5000" threads="600" threadpool="fixed" loadbalance="roundrobin" accesslog="true"
              retries="0" validation="true"/>
    소비 단 오픈
    소비 자 는 서버 의 api 를 도 입 했 기 때문에 소비 자 는 검증 을 시작 할 때 consumer.xml 에서 인증 을 시작 하면 vaidation="true"
    consumer 에서 검 사 를 시작 하면 서 비 스 를 호출 할 때 consumer 에서 매개 변 수 를 검사 하고 provider 의 자원 을 사용 하지 않 습 니 다.
    
    <dubbo:consumer check="false" timeout="60000" retries="0" validation="true"/>
    
    사용자 정의 이상 처리 처리 rpc 검사 이상 설정
    
    @ControllerAdvice
    public class DefaultExceptionHandler {
     
     @ExceptionHandler({RpcException.class})
      @ResponseBody
      @ResponseStatus(HttpStatus.OK)
      public ResponseEntity RpcException(Exception ex, Model model) {
        logger.error("rpc        。{}", ex.getMessage());
        String errMsg = ((ConstraintViolationException) ex.getCause()).getConstraintViolations()
            .iterator().next().getMessage();
        //ResponseEntity         , springframework.http.ResponseEntity,             ,         errMsg     
        return ResponseEntity.error(ARG_ERROR_CODE, errMsg);
      }
    }
    
    컨트롤 러 검증
    즉,test-rest 프로젝트 는 dubbo 의 소비자 프로젝트 이기 때문에 springboot 프로젝트 이기 도 합 니 다.전단 에서 전달 하 는 매개 변 수 는 이 층 포장 후 호출 서 비 스 를 해 야 하기 때문이다.따라서 전단 에 전 달 된 인 자 를 검증 할 때 Springboot+vaidation 을 사용 하여 검증 할 수 있 습 니 다.
    Spring 3 은 JSR-303 검증 프레임 워 크 를 지원 합 니 다.JSR-303 은 자바 EE 6 의 하위 규범 으로 BeanValidation 이 라 고 합 니 다.공식 참고 실현 은 hibenate Validator(Hibernate ORM 과 관계 가 없 음)이 고 JSR 303 은 자바 Bean 의 필드 값 을 검증 하 는 데 사 용 됩 니 다.
    구체 적 인 설정 은 블 로그 참조:springboot 검사 프레임 워 크 vaidation 검사 사용
    사소한 문제
    test-rest 와 test-provider 는 모두 test-api 를 인용 했다.test-rest 층 의 입 참 이 test-provider 의 서비스 호출 인삼 과 같다 면,이 때 는 test-rest 프로젝트 에 참 여 된 자바 bean 을 새로 만들어 야 합 니 다.
    test-rest 의 자바 빈 은 test-api 의 자바 빈 과 같 지만.그러나 Spring 3 는 분석 할 때 test-api 의 자바 빈 검사 주 해 를 가 져 올 수 없습니다.그래서 검증 이 필요 할 때 는 test-rest 프로젝트 에 test-api 자바 bean 과 같은 자바 bean 을 만들어 야 합 니 다.
    부록:주해 및 의미 검증
    
    //(1)   
    @Null        null
    @NotNull         null,        0    
    @NotBlank           Null   Trim       0,     ,        .
    @NotEmpty          NULL   EMPTY.
    //(2)Booelan  
    @AssertTrue    Boolean       true
    @AssertFalse    Boolean       false
    //(3)    
    @Size(min=, max=)     (Array,Collection,Map,String)            
    @Length(min=, max=)          min max    .
    //(4)    
    @Past    Date   Calendar            ,                      
    @Future    Date   Calendar             ,                      
    @Pattern    String               ,                ,regexp:      flags:    Pattern.Flag    ,            。
    //(5)    
         Stirng,Integer  ,      int   ,      ""      int,      Stirng "",Integer null
    @Min    Number   String            
    @Max    Number   String            
    @DecimalMax                    .             BigDecimal            .      
    @DecimalMin                    .             BigDecimal            .      
    @Digits    Number   String        
    @Digits(integer=,fraction=)                  ,interger      ,fraction      。
    @Range(min=, max=)                
    @Valid             ,               ,              ,     map,            .(        )
    @CreditCardNumber     
    @Email          ,   null,     ,     。
    @ScriptAssert(lang= ,script=, alias=)
    @URL(protocol=,host=, port=,regexp=, flags=
    물론 사용자 정의 검사 주해 도 가능 합 니 다.
    이 곳 에서 본 고 는 전시 하지 않 습 니 다.사용자 정의 검사 주 해 를 필요 로 한다 면 참고 문 서 를 찾 아 볼 수 있 습 니 다.
    참고 문서:
    https://www.jb51.net/article/170692.htm
    https://www.jb51.net/article/155033.htm
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기