validation校验 @NotNull @NotBlank及分组校验
我們經(jīng)常需要對(duì)接口的請(qǐng)求參數(shù)進(jìn)行校驗(yàn),在沒有使用validation之前都是用if去做校驗(yàn)的,但這樣通常需要寫一長串的if語句,使代碼看起來非常臃腫,即使將這些校驗(yàn)封裝到一個(gè)方法或是類中,然后調(diào)用,但本質(zhì)上并沒有改變什么。
validation校驗(yàn)可以方便的解決上述問題,只需在請(qǐng)求參數(shù)的DTO類的屬性上加上對(duì)應(yīng)的注解。它就能幫助我們?cè)趫?zhí)行接口方法之前提前進(jìn)行參數(shù)校驗(yàn)。我們常用的校驗(yàn)如判空@NotNull @NotBlank,或是對(duì)參數(shù)的大小、長度等都能進(jìn)行校驗(yàn),甚至可以使用正則表達(dá)式。
使用時(shí)只需在DTO上加上注解
再在對(duì)應(yīng)的接口上加上注解@Valid
@ApiOperation(value = "新增行業(yè)") @PostMapping(value = "/xxx/xxx/addIndustry",consumes = "application/json") ResultModel<IndustryVO> addIndustry(@Valid @RequestBody IndustryDTO var1);這樣在調(diào)用新增接口時(shí)如果參數(shù)industryName為空或空字符串,validation會(huì)自動(dòng)幫我們拋出校驗(yàn)錯(cuò)誤:行業(yè)名稱不能為空
分組校驗(yàn)
有些時(shí)候可能我們新增修改接口請(qǐng)求參數(shù)用到的是同一個(gè)實(shí)體作為入?yún)?#xff0c;但是有些參數(shù)在新增時(shí)是不用的,在修改時(shí)卻需要填寫。比如主鍵id,這時(shí)候單純的一個(gè)@NotNull注解并不能達(dá)成這樣的要求,我們需要引入分組校驗(yàn)。
先定義兩個(gè)組
然后將入?yún)?shí)體改造一下,給validation注解加上組
@Data @Api("行業(yè)") public class IndustryDTO implements Serializable {private static final long serialVersionUID = 1L;@NotNull(message = "id不能為空", groups = UpdateGroup.class)private Long id;@NotBlank(message = "行業(yè)名稱不能為空",groups = AddGroup.class)@NotBlank(message = "行業(yè)名稱不能為空", groups = UpdateGroup.class)@ApiModelProperty("行業(yè)名稱")private String industryName;@ApiModelProperty("狀態(tài)0-關(guān)閉 1-啟用")private Long status;@ApiModelProperty("分頁開始")private int page = 0;@ApiModelProperty("每頁數(shù)據(jù)行數(shù)")private int size = 10; }在接口上也需要聲明本接口在校驗(yàn)時(shí)需要調(diào)用的是哪個(gè)組的校驗(yàn)規(guī)則
/*** @author TangHaiZhi* @date 2021/8/20*/ @Api(value = "運(yùn)營解決方案行業(yè)") @Validated @Feign(serviceName = "xxxService") public interface OperationIndustryFeign {@ApiOperation(value = "新增行業(yè)")@Validated(AddGroup.class)@PostMapping(value = "/xxx/xxx/addIndustry",consumes = "application/json")ResultModel<IndustryVO> addIndustry(@Valid @RequestBody IndustryDTO var1);@ApiOperation(value = "修改行業(yè)")@Validated(UpdateGroup.class)@PostMapping(value = "/xxx/xxx/updateIndustry",consumes = "application/json")ResultModel<IndustryVO> updateIndustry(@Valid @RequestBody IndustryDTO var1);@ApiOperation(value = "查詢?nèi)啃袠I(yè)")@PostMapping(value = "/xxx/xxx/queryIndustry",consumes = "application/json")ResultModel<List<IndustryVO>> queryIndustry(@RequestBody IndustryDTO var1); }這樣在新增時(shí)會(huì)調(diào)用add組的校驗(yàn)規(guī)則去校驗(yàn)行業(yè)名稱,在修改時(shí)會(huì)調(diào)用update組的校驗(yàn)規(guī)則去校驗(yàn)id和行業(yè)名稱,而在查詢時(shí)則不會(huì)進(jìn)行任何校驗(yàn)
總結(jié)
以上是生活随笔為你收集整理的validation校验 @NotNull @NotBlank及分组校验的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STM32 NUCLEO开发板通过Min
- 下一篇: 如何恢复笔记本的工作报表呢