亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在持久化之前啟用 Spring Bean 驗證但忽略 HTTP 請求

如何在持久化之前啟用 Spring Bean 驗證但忽略 HTTP 請求

精慕HU 2023-02-16 16:23:40
這是我的場景class B {   @NotNull    String x;}class A {    @Valid    B b;    @NotNull    String y;} 現在我的 Http POST 請求獲得一個對象class A作為有效負載。String y應該在傳入的 HTTP 請求中進行驗證(并且在持久化到數據庫之前也進行驗證)。但是,String x不應在傳入的 HTTP 請求中驗證(并且僅在持久保存到 DB 之前驗證),因為String x在請求中將為 null,并且其值將在完整class A對象持久保存之前由業務邏輯設置。有什么辦法可以做到這一點?
查看完整描述

3 回答

?
溫溫醬

TA貢獻1752條經驗 獲得超4個贊

如果可以編輯這些對象,則可以使用驗證組;


class B {

    @NotNull(groups = Ignored.class)

    String x;

}


class A {

    @Valid

    B b;


    @NotNull

    String y;

在哪里Ignored;


import javax.validation.groups.Default;


public interface Ignored extends Default {

}

如果你的控制器沒有定義這個組,它下面的任何注釋都將被忽略,因此你的要求將得到滿足,請求中的驗證B.x將被忽略,但其他字段A將被驗證。但我不是 100% 確定驗證將在數據庫端應用,你可以試試嗎?


否則你可以嘗試做;


@RestController

public class Controller {


    @PostMapping("/etc")

    ResponseEntity<String> addA(@RequestBody A a) { //disabled validation here

        B tempB = a.getB();

        a.setB(null);

        validateA(a);

        a.setB(tempB);

        // continue logic

    }

}

在哪里validateA();


import org.springframework.validation.annotation.Validated;


@Validated

public class Validator {


    public void validateA(@Valid A a) {

        // nothing here

    }

}

這是一個丑陋的解決方案,但仍然是一個解決方案......


查看完整回答
反對 回復 2023-02-16
?
HUH函數

TA貢獻1836條經驗 獲得超4個贊

我認為您缺少在將在控制器層中驗證的參數上添加 @Vaild 注釋。


@RestController

public class AController {


    @PostMapping("/a")

    ResponseEntity<String> addA(@Valid @RequestBody A a) {

        // persisting the a entity 

        return ResponseEntity.ok("A is valid");

    }

}


查看完整回答
反對 回復 2023-02-16
?
qq_遁去的一_1

TA貢獻1725條經驗 獲得超8個贊

實際上,如果“@Valid”注釋沒有作為參數前綴,它不會影響,@Jonathan 解釋道。


要在持久化之前啟用驗證,它的工作方式如下:


@Repository

@Validated

public MyDao {

    public void insertA(@Valid A a){

        //logic here

    }


}

@Validated(org.springframework.validation.annotation.Validated) 是啟用參數驗證的關鍵。這個對我有用。


查看完整回答
反對 回復 2023-02-16
  • 3 回答
  • 0 關注
  • 116 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號