3 回答

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超4個(gè)贊
如果使用方法參數(shù)驗(yàn)證,則應(yīng)使用 對(duì)控制器進(jìn)行批注,如文檔所述:@Validated
要獲得 Spring 驅(qū)動(dòng)方法驗(yàn)證的資格,所有目標(biāo)類都需要使用 Spring 的注釋進(jìn)行注釋。((可選)還可以聲明要使用的驗(yàn)證組。有關(guān) Hibernate Validator 和 Bean Validation 1.1 提供程序的設(shè)置詳細(xì)信息,請(qǐng)參閱 javadoc。@ValidatedMethodValidationPostProcessor
這意味著您應(yīng)該將代碼更改為:
@Validated // Add this
@RestController
public class MyApi {
// ...
}
之后,如果驗(yàn)證不匹配,它將拋出一個(gè)。ContraintViolationException
但請(qǐng)注意,由于您只有注釋,因此如果您不提供 ,則集合將是,并且該集合也將有效。如果不希望這樣做,則還應(yīng)添加批注,或從 中刪除值。@Size()programEndTimenull@NotNullrequired = false@RequestParam
不能使用 though 來檢索錯(cuò)誤,因?yàn)檫@僅適用于模型屬性或請(qǐng)求正文。您可以做的是為 定義一個(gè)異常處理程序:BindingResultConstraintViolationException
@ExceptionHandler(ConstraintViolationException.class)
public void handleConstraint(ConstraintViolationException ex) {
System.out.println("Error");
}

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超8個(gè)贊
根據(jù) Bean Validator 2.0、Hibernate Validator 6.x,您可以直接在參數(shù)化類型上使用約束。
@GetMapping(path = "/myApi", produces = { APPLICATION_JSON_VALUE })
public ResponseEntity<List<MyObject>> getSomething(@RequestParam(value = "programEndTime", required = false) List<@Size(min = 1, max = 2) String> programEndTimes)
有關(guān)詳細(xì)信息,請(qǐng)查看容器元素約束。

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超6個(gè)贊
您可以使用類和@RequestBody進(jìn)行參數(shù)驗(yàn)證,這像我一樣成功。
public class Test {
@Size(min = 1 , max = 5)
private List<String> programEndTime;
public List<String> getProgramEndTime() {
return programEndTime;
}
public void setProgramEndTime(List<String> programEndTime) {
this.programEndTime = programEndTime;
}
}
@PostMapping("test")
public void test( @Valid @RequestBody Test test,
BindingResult result){
if (result.hasErrors()) {
System.out.println("Error");
} else {
System.out.println("OK");
}
System.out.println(",.,.");
}
添加回答
舉報(bào)