第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

ConstraintViolationException 和 MethodArgumentNot

ConstraintViolationException 和 MethodArgumentNot

翻過高山走不出你 2023-03-23 14:16:33
當(dāng)我使用@Valid中的注解驗(yàn)證 bean 時(shí)javax.validation,對(duì)于我得到的一些對(duì)象ConstraintViolationException,對(duì)于一些我得到的是MethodArgumentNotValidException.我知道,如果我驗(yàn)證@ResponseBody控制器中的任何內(nèi)容,它會(huì)拋出一個(gè)MethodArgumentNotValidException.@MyCustomValidation但是對(duì)于類級(jí)別的某些自定義驗(yàn)證(例如) ConstraintViolationException,即使它正在 @ResponseValidation 中進(jìn)行驗(yàn)證,它也會(huì)拋出。對(duì)于不同 REST 端點(diǎn)的一些其他自定義驗(yàn)證,它會(huì)拋出MethodArgumentNotValidException.我發(fā)現(xiàn)理解它的行為有點(diǎn)困難。@PostMapping(path = "/someEndPoint")    @Validated(OnASave.class)public ResponseEntity<ClassA> saveObjA(@Valid @RequestBody ClassA objA)結(jié)果 - 拋出MethodArgumentNotValidException@PostMapping(path = "/someOtherEndPoint")   @Validated(OnBSave.class)public ResponseEntity<ClassB> saveObjB(@Valid @RequestBody ClassB objB)結(jié)果 - 拋出ConstraintViolationException和ClassA都有ClassB自定義驗(yàn)證。
查看完整描述

3 回答

?
慕妹3146593

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超9個(gè)贊

當(dāng)您使用@Valid 時(shí),您正在應(yīng)用您在模型類字段上定義的驗(yàn)證,雖然有不同類型的驗(yàn)證,您可以選擇@NotNull、@Max、@Min 等,您將獲得匹配類型。

通常,所有這些都與在所有情況下都會(huì)拋出的MethodArgumentNotValidException并行。

來自官方文檔

當(dāng)驗(yàn)證用 @Valid 注釋的參數(shù)失敗時(shí)拋出異常。

當(dāng)違反某些約束時(shí),休眠實(shí)體管理器會(huì)拋出 ConstraintViolationException,因此這意味著您違反了正在使用的某些實(shí)體中的某些字段。


查看完整回答
反對(duì) 回復(fù) 2023-03-23
?
aluckdog

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超7個(gè)贊

為了簡單理解,如果通過使用@Valid 注釋在控制器/服務(wù)層進(jìn)行驗(yàn)證,它會(huì)生成 MethodArgumentNotValidException,您可以為此添加處理程序并相應(yīng)地返回響應(yīng),此類是 spring 框架的一部分,驗(yàn)證由 spring 框架執(zhí)行見下面的示例


@ExceptionHandler(MethodArgumentNotValidException.class)

public ResponseEntity<Response> handleMethodArgumentNotValidException(MethodArgumentNotValidException ex) {


    logger.info("Invalid arguments found : " + ex.getMessage());

    // Get the error messages for invalid fields

    List<FieldError> errors = ex.getBindingResult()

            .getFieldErrors()

            .stream()

            .map(fieldError -> new FieldError(fieldError.getField(), fieldError.getDefaultMessage()))

            .collect(Collectors.toList());


    String message = messageSource.getMessage("invalid.data.message", null, LocaleContextHolder.getLocale());

    Response response = new Response(false, message)

            .setErrors(errors);

    ResponseEntity<Response> responseEntity = ResponseEntity.status(HttpStatus.BAD_REQUEST).body(response);

    return responseEntity;

}

并且如果您不使用@Valid 注釋進(jìn)行驗(yàn)證,并且在 jpa 層由 hibernate 引發(fā)異常,它會(huì)生成 ConstraintViolationException,此異常是 Javax bean 驗(yàn)證框架的一部分,并在執(zhí)行持久性操作時(shí)引發(fā)(在實(shí)際執(zhí)行 sql 之前)請(qǐng)參閱下面的示例


@ExceptionHandler(ConstraintViolationException.class)

    public ResponseEntity<Response> handleConstraintViolationException(ConstraintViolationException ex) {

        List<FieldError> errors = ex.getConstraintViolations()

                .stream()

                .map(constraintViolation -> {

                    return new FieldError(constraintViolation.getRootBeanClass().getName() + " " + constraintViolation.getPropertyPath(), constraintViolation.getMessage());

                })

                .collect(Collectors.toList());


        String message = messageSource.getMessage("invalid.data.message", null, LocaleContextHolder.getLocale());

        Response response = new Response(false, message)

                .setErrors(errors);

        ResponseEntity<Response> responseEntity = ResponseEntity.status(HttpStatus.BAD_REQUEST).body(response);

        return responseEntity;

    }


查看完整回答
反對(duì) 回復(fù) 2023-03-23
?
翻閱古今

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超5個(gè)贊

看看這篇文章。當(dāng)您將 spring 的驗(yàn)證框架與 bean 驗(yàn)證混合使用時(shí),會(huì)在不同情況下拋出這些異常。



查看完整回答
反對(duì) 回復(fù) 2023-03-23
  • 3 回答
  • 0 關(guān)注
  • 557 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)