春のキャッチ校正パラメータ例外と統一された治療

NotBlank @有効@使用@Validated、など、あなた自身の百度、紙はキャプチャと検証パッケージから復帰障害情報を焦点を当てて

参考:

https://mp.weixin.qq.com/s/EaZxYKyC4L_EofWdtyBCpw

https://www.jianshu.com/p/bcc5a3c86480

 

検証は例外メッセージをキャプチャするために失敗しました

@ControllerAdvice 
パブリッククラスWebExceptionHandler {    //ダウン続けコードを見る前に、エンティティスローされた例外を要求した後、認証@Validパス検証の失敗を使用して要求処理をゲット
    @ExceptionHandler(BindException.class)を
    @ResponseBody 
    公共ResponseVO BindExceptionHandler(EはBindExceptionを){ 
        文字列メッセージ= e.getBindingResult()getAllErrors()ストリーム()地図(DefaultMessageSourceResolvable :: getDefaultMessage).collect(Collectors.joining(...)); 
        新しい新しいResponseVO(メッセージ)を返す; 
    } 
    //パラメータフォーマット処理要求障害後スローされた例外がエラー@RequestParam javax.validation.ConstraintViolationExceptionで検証
    @ExceptionHandler(ConstraintViolationException.class)
    @ResponseBody 
    公共ResponseVO ConstraintViolationExceptionHandler(ConstraintViolationException E){

。。文字列メッセージ= e.getConstraintViolations()ストリーム()マップ(ConstraintViolation ::のgetMessage).collect(Collectors.joining())。 新しいResponseVO(メッセージ)を返します。 } //处理请求参数格式错误@RequestBody上検証失败后抛出的异常是MethodArgumentNotValidException异常。 @ExceptionHandler(MethodArgumentNotValidException.class) @ResponseBody 公共ResponseVO MethodArgumentNotValidExceptionHandler(MethodArgumentNotValidException電子){ 文字列メッセージ= e.getBindingResult()。getAllErrors( ).stream()マップ(DefaultMessageSourceResolvable :: getDefaultMessage).collect(Collectors.joining(。))。 新しいResponseVO(メッセージ)を返します。 } }

 

例として与えられたリクエストパラメータは、その後、むしろよりはBindException ConstraintViolationExceptionとMethodArgumentNotValidExceptionを投げます

@RestController 
@RequestMapping( "試験")
パブリッククラスTestController { 

    ( "払い戻し")を@GetMapping 
    公衆ResponseVO払い戻し(@Valid RefundRequest要求)例外を{スロー
        新しい新しいResponseVOを(返す); 
    } 
} 

@Data 
パブリッククラスRefundRequest実装シリアライズ{ 
    @NotBlank (メッセージ=「注文番号を空にすることはできません」)
    プライベート文字列注文ID、
    @Min(値= 0、メッセージ=「消費量の量は負にすることはできませんです」)
    プライベートINT orderAmt; 
}

 

あなたは、複数の検証はリクエストパラメータを失敗した場合は、ヒット最初のチェックが例外をスロー失敗し、次のように、次のチェック異常なパラメータ、設定はありません

@Configuration 
パブリッククラスのWebConfig { 
    @Bean 
    公共バリバリ(){ 
        ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class)
                .configureは()
                //フェイルファーストはない、コンテキストの検証の失敗が発生した場合、直ちに終了を確認手段その後の検証。
                (真の).failFast 
                .buildValidatorFactory(); 

        戻りvalidatorFactory.getValidator(); 
    } 

    @Bean 
    公共MethodValidationPostProcessor methodValidationPostProcessor(){ 
        MethodValidationPostProcessor methodValidationPostProcessor新しい新しいMethodValidationPostProcessor =(); 
        methodValidationPostProcessor.setValidator(バリ())。
        methodValidationPostProcessorを返します。
    } 
}

 

 

 

NotBlank @有効@使用@Validated、など、あなた自身の百度、紙はキャプチャと検証パッケージから復帰障害情報を焦点を当てて

参考:

https://mp.weixin.qq.com/s/EaZxYKyC4L_EofWdtyBCpw

https://www.jianshu.com/p/bcc5a3c86480

 

検証は例外メッセージをキャプチャするために失敗しました

@ControllerAdvice 
パブリッククラスWebExceptionHandler {    //ダウン続けコードを見る前に、エンティティスローされた例外を要求した後、認証@Validパス検証の失敗を使用して要求処理をゲット
    @ExceptionHandler(BindException.class)を
    @ResponseBody 
    公共ResponseVO BindExceptionHandler(EはBindExceptionを){ 
        文字列メッセージ= e.getBindingResult()getAllErrors()ストリーム()地図(DefaultMessageSourceResolvable :: getDefaultMessage).collect(Collectors.joining(...)); 
        新しい新しいResponseVO(メッセージ)を返す; 
    } 
    //パラメータフォーマット処理要求障害後スローされた例外がエラー@RequestParam javax.validation.ConstraintViolationExceptionで検証
    @ExceptionHandler(ConstraintViolationException.class)
    @ResponseBody 
    公共ResponseVO ConstraintViolationExceptionHandler(ConstraintViolationException E){

。。文字列メッセージ= e.getConstraintViolations()ストリーム()マップ(ConstraintViolation ::のgetMessage).collect(Collectors.joining())。 新しいResponseVO(メッセージ)を返します。 } //处理请求参数格式错误@RequestBody上検証失败后抛出的异常是MethodArgumentNotValidException异常。 @ExceptionHandler(MethodArgumentNotValidException.class) @ResponseBody 公共ResponseVO MethodArgumentNotValidExceptionHandler(MethodArgumentNotValidException電子){ 文字列メッセージ= e.getBindingResult()。getAllErrors( ).stream()マップ(DefaultMessageSourceResolvable :: getDefaultMessage).collect(Collectors.joining(。))。 新しいResponseVO(メッセージ)を返します。 } }

 

例として与えられたリクエストパラメータは、その後、むしろよりはBindException ConstraintViolationExceptionとMethodArgumentNotValidExceptionを投げます

@RestController 
@RequestMapping( "試験")
パブリッククラスTestController { 

    ( "払い戻し")を@GetMapping 
    公衆ResponseVO払い戻し(@Valid RefundRequest要求)例外を{スロー
        新しい新しいResponseVOを(返す); 
    } 
} 

@Data 
パブリッククラスRefundRequest実装シリアライズ{ 
    @NotBlank (メッセージ=「注文番号を空にすることはできません」)
    プライベート文字列注文ID、
    @Min(値= 0、メッセージ=「消費量の量は負にすることはできませんです」)
    プライベートINT orderAmt; 
}

 

あなたは、複数の検証はリクエストパラメータを失敗した場合は、ヒット最初のチェックが例外をスロー失敗し、次のように、次のチェック異常なパラメータ、設定はありません

@Configuration 
パブリッククラスのWebConfig { 
    @Bean 
    公共バリバリ(){ 
        ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class)
                .configureは()
                //フェイルファーストはない、コンテキストの検証の失敗が発生した場合、直ちに終了を確認手段その後の検証。
                (真の).failFast 
                .buildValidatorFactory(); 

        戻りvalidatorFactory.getValidator(); 
    } 

    @Bean 
    公共MethodValidationPostProcessor methodValidationPostProcessor(){ 
        MethodValidationPostProcessor methodValidationPostProcessor新しい新しいMethodValidationPostProcessor =(); 
        methodValidationPostProcessor.setValidator(バリ())。
        methodValidationPostProcessorを返します。
    } 
}

 

 

おすすめ

転載: www.cnblogs.com/panchanggui/p/11758242.html