最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot的實(shí)體類(lèi)字段校驗(yàn)的分組校驗(yàn)具體實(shí)現(xiàn)步驟

 更新時(shí)間:2025年03月11日 11:21:30   作者:Su米蘇  
分組校驗(yàn)允許在不同場(chǎng)景下對(duì)同一實(shí)體類(lèi)應(yīng)用不同的校驗(yàn)規(guī)則,通過(guò)定義分組接口、在實(shí)體類(lèi)和Controller中指定分組,以及全局異常處理,可以靈活控制校驗(yàn)規(guī)則,本文介紹springboot的實(shí)體類(lèi)字段校驗(yàn)的分組校驗(yàn),感興趣的朋友一起看看吧

分組校驗(yàn)(Group Validation)允許在不同的場(chǎng)景下對(duì)同一個(gè)實(shí)體類(lèi)應(yīng)用不同的校驗(yàn)規(guī)則。例如,在新增數(shù)據(jù)更新數(shù)據(jù)時(shí),可能需要對(duì)某些字段的校驗(yàn)規(guī)則進(jìn)行調(diào)整。以下是分組校驗(yàn)的具體實(shí)現(xiàn)步驟:

一、定義分組接口

創(chuàng)建空的標(biāo)記接口(僅用于分組標(biāo)識(shí)):

// 新增時(shí)的校驗(yàn)分組
public interface CreateGroup {}
// 更新時(shí)的校驗(yàn)分組
public interface UpdateGroup {}

二、在實(shí)體類(lèi)中指定分組

在字段的校驗(yàn)注解中,通過(guò) groups 屬性指定所屬分組:

public class User {
    @NotBlank(message = "用戶(hù)ID不能為空", groups = UpdateGroup.class)
    private String id;
    @NotBlank(message = "用戶(hù)名不能為空", groups = CreateGroup.class)
    private String username;
    @Size(min = 6, max = 20, message = "密碼長(zhǎng)度需在6到20位之間", groups = {CreateGroup.class, UpdateGroup.class})
    private String password;
    // 省略Getter和Setter
}
  • id 字段:僅在 UpdateGroup 分組下校驗(yàn)(更新時(shí)必須校驗(yàn))。
  • username 字段:僅在 CreateGroup 分組下校驗(yàn)(新增時(shí)必須校驗(yàn))。
  • password 字段:在 CreateGroupUpdateGroup 分組下均校驗(yàn)(新增和更新時(shí)都校驗(yàn))。

三、在Controller中指定校驗(yàn)分組

在Controller方法參數(shù)上使用 @Validated 注解(注意是 Spring 的注解,而非 @Valid),并指定分組:

@RestController
public class UserController {
    // 新增用戶(hù)(校驗(yàn) CreateGroup 分組)
    @PostMapping("/users")
    public String createUser(@Validated(CreateGroup.class) @RequestBody User user) {
        return "用戶(hù)新增成功";
    }
    // 更新用戶(hù)(校驗(yàn) UpdateGroup 分組)
    @PutMapping("/users/{id}")
    public String updateUser(@Validated(UpdateGroup.class) @RequestBody User user) {
        return "用戶(hù)更新成功";
    }
}

四、全局異常處理

分組校驗(yàn)失敗會(huì)拋出 ConstraintViolationException,需在全局異常處理器中捕獲:

@RestControllerAdvice
public class GlobalExceptionHandler {
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    @ExceptionHandler(ConstraintViolationException.class)
    public Map<String, Object> handleConstraintViolationException(ConstraintViolationException ex) {
        Map<String, String> errors = new HashMap<>();
        ex.getConstraintViolations().forEach(violation -> {
            String field = violation.getPropertyPath().toString();
            String message = violation.getMessage();
            errors.put(field, message);
        });
        return Map.of(
            "code", HttpStatus.BAD_REQUEST.value(),
            "message", "參數(shù)校驗(yàn)失敗",
            "data", errors
        );
    }
}

五、測(cè)試示例 

1. 新增用戶(hù)(觸發(fā) CreateGroup 分組校驗(yàn))

請(qǐng)求:

POST /users
Content-Type: application/json
{
    "password": "12345"
}

響應(yīng):

{
    "code": 400,
    "message": "參數(shù)校驗(yàn)失敗",
    "data": {
        "username": "用戶(hù)名不能為空",
        "password": "密碼長(zhǎng)度需在6到20位之間"
    }
}

2. 更新用戶(hù)(觸發(fā) UpdateGroup 分組校驗(yàn))

請(qǐng)求:

PUT /users/123
Content-Type: application/json
{
    "password": "12345"
}

響應(yīng):

{
    "code": 400,
    "message": "參數(shù)校驗(yàn)失敗",
    "data": {
        "id": "用戶(hù)ID不能為空",
        "password": "密碼長(zhǎng)度需在6到20位之間"
    }
}

六、分組校驗(yàn)的高級(jí)用法

1. 多分組組合校驗(yàn)

可以在 @Validated 中同時(shí)指定多個(gè)分組:

@Validated({CreateGroup.class, AnotherGroup.class})

2. 默認(rèn)分組

如果字段未指定 groups 屬性,則默認(rèn)屬于 Default 分組。可以通過(guò) @Validatedvalue 屬性同時(shí)包含默認(rèn)分組:

@Validated(value = {UpdateGroup.class, Default.class})

3. 繼承分組

分組接口可以繼承其他接口,形成層級(jí)關(guān)系:

public interface AdvancedGroup extends CreateGroup {}

七、分組校驗(yàn) vs 多個(gè)DTO

方案優(yōu)點(diǎn)缺點(diǎn)
分組校驗(yàn)避免創(chuàng)建多個(gè)相似DTO,減少冗余代碼實(shí)體類(lèi)可能包含不同場(chǎng)景的注解
多個(gè)DTO職責(zé)單一,結(jié)構(gòu)清晰需要維護(hù)多個(gè)DTO類(lèi)

總結(jié)

通過(guò)分組校驗(yàn),可以靈活控制不同場(chǎng)景下的校驗(yàn)規(guī)則,避免為每個(gè)場(chǎng)景創(chuàng)建單獨(dú)的DTO類(lèi)。關(guān)鍵步驟:

定義分組接口。在實(shí)體類(lèi)字段的校驗(yàn)注解中指定 groups。在Controller方法參數(shù)上使用 @Validated(分組.class)。全局捕獲 ConstraintViolationException 并返回自定義錯(cuò)誤。

到此這篇關(guān)于springboot的實(shí)體類(lèi)字段校驗(yàn)的分組校驗(yàn)具體實(shí)現(xiàn)步驟的文章就介紹到這了,更多相關(guān)springboot分組校驗(yàn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

青岛市| 环江| 厦门市| 鄯善县| 晋中市| 凌云县| 宣汉县| 色达县| 新郑市| 霞浦县| 蓝田县| 宿松县| 剑阁县| 卓尼县| 长岛县| 辽阳市| 怀集县| 鄂伦春自治旗| 丹阳市| 沅江市| 富蕴县| 云和县| 莎车县| 常熟市| 丹江口市| 晋州市| 阿合奇县| 长泰县| 东辽县| 垣曲县| 永清县| 噶尔县| 枝江市| 三门县| 彰化市| 浦县| 永定县| 定兴县| 南木林县| 绵阳市| 邢台市|