1

프로젝트에 대해 Spring 5를 평가 중이며 Mono 매개 변수의 유효성을 검사하는 가장 좋은 방법을 모릅니다. 전통적으로 우리는 다음과 같이 우리의 방법은 매개 변수의 유효성을 확인 MethodValidationPostProcessor을 사용하고 있었다 :Spring 반응을 사용할 때 Mono의 유효성을 검사하는 방법

@Validated 
@Service 
public class FooService 

@Validated(SignUpValidation.class) 
public void signup(@Valid UserCommand userCommand) { 

    ... 
} 

우리는 다음 ControllerAdvice 또는 ErrorController A의 예외를 처리하고 클라이언트에 적합한 4XX 응답을 전달할 것이다.

그러나 매개 변수를 Mono으로 변경하면 더 이상 작동하지 않습니다.

스프링 리 액티브를 이해하는 한 실제로는 실제로 작동하지 않을 것입니다. 그렇다면 MonoFlux의 유효성을 검사하고 적절한 오류 응답을 보내는 스프링 5 최상의 방법은 무엇입니까?

답변

1

이 질문에 대한 답변을보기 전에 빠른 대답 유형 인 void은 반응이없는 응용 프로그램에서 매우 드문 경우입니다. 이것을 보면이 메소드가 실제 작업을 비동기 적으로 수행해야하지만이 메소드는 동기 유형을 리턴합니다. 내 대답은 Mono<Void>으로 변경했습니다.

As stated in the reference documentation, 스프링 WebFlux는 검증을 지원합니다.

그러나 방법 매개 변수가 반응 형이 될 수 있기 때문에 모범 사례가 다릅니다. method 매개 변수가 아직 해결되지 않은 경우 유효성 검사 결과를 가질 수 없습니다.

그래서 그런 일이 정말 작동하지 않습니다

// can't have the BindingResult synchronously, 
// as the userCommand hasn't been resolved yet 
public Mono<Void> signup(@Valid Mono<UserCommand> userCommand, BindingResult result) 

// while technically feasible, you'd have to resolve 
// the userCommand first and then look at the validation result 
public Mono<Void> signup(@Valid Mono<UserCommand> userCommand, Mono<BindingResult> result) 

뭔가 더 관용적하고 사용하기 쉽게 반응 연산자 :

public Mono<Void> signup(@Valid Mono<UserCommand> userCommand) { 
    /* 
    * a WebExchangeBindException will flow through the pipeline 
    * in case of validation error. 
    * you can use onErrorResume or other onError* operators 
    * to map the given exception to a custom one 
    */ 
      return userCommand.onErrorResume(t -> Mono.error(...)).then(); 
} 
+0

감사합니다! 내 질문을 Mono 으로 수정했습니다. 컨트롤러에서'@ Valid'가 작동하는 것을 보았습니다. '@Validated (SignUpValidation.class)', 작동하지 않습니다. 또한,'MethodValidationPostProcessor' (위의 예제 참조)를 사용하는 서비스 메소드의 유효성 검사가 작동하지 않습니다. BTW, 언급 한 참조 문서를 찾을 수 없습니다 ("참조 설명서에 명시된 바와 같이 Spring WebFlux가 유효성 검사를 지원합니다"). 그게 어디 있니? – Sanjay

+1

WebFlux에서 유효성 검사 그룹이 지원되지 않는다고 생각합니다. 이것은 공식 이슈 트래커 (jira.spring.io)에서 제기할만한 가치가있을 것입니다. 참조 설명서의 관련 섹션에는 유효성을 검사하는 입력 매개 변수 만 나와 있습니다. https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/web-reactive.html#webflux-config-validation을 참조하십시오. –