springboot+dubbo+vaidation rpc 매개 변수 검증 실현 방법
프로젝트 구조
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
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin Springboot -- 파트 14 사용 사례 REST로 전환하여 POST로 JSON으로 전환前回 前回 前回 記事 の は は で で で で で で を 使っ 使っ 使っ て て て て て リクエスト を を 受け取り 、 reqeustbody で 、 その リクエスト の ボディ ボディ を を 受け取り 、 関数 内部 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.