[英]Spring Rest Add @NotEmpty in @RequestBody without creating request POJO
我想在@RequestBody
添加@NotEmpty
,但我不想僅為請求創建額外的 POJO,我該怎么做?
我想執行以下操作,但是當我將[]
放入請求正文時,它仍然返回201 Created
狀態代碼,這意味着@NotEmpty
實際上不起作用。
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public void create(@Valid @NotEmpty @RequestBody Set<String> request) {
.....
}
我不想做這樣的事情,但@NotEmpty
在這種情況下工作:
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public void create(@Valid @NotEmpty @RequestBody SampleRequest request) {
.....
}
SampleRequest 類
public class SampleRequest {
@NotEmpty
private Set<String> name;
..Setter and Getter
}
您還需要使用@Validated ( https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/validation/annotation/Validated.html ) 注釋您的控制器、方法或參數,以便觸發驗證
在控制器類上添加注釋@Validated
,然后對方法參數進行驗證即可。 有關詳細信息,您可以在此處查看教程https://www.baeldung.com/spring-validate-list-controller 。
我要做的第一件事是檢查您的類路徑上是否有驗證實現。 @NotEmpty 注釋來自一個單獨的 jar ( validation-api.jar
),因此有可能在您的代碼編譯時未在運行時強制執行驗證。 您應該會看到一個名為hibernate-validator.jar
類的依賴hibernate-validator.jar
如果失敗,您可以嘗試將其替換為@Size(min=1)
由於您沒有驗證像 DTO 這樣的復雜 Java 對象,因此您可以在方法參數上放置約束(驗證注釋)。
你只需要做兩件事
方法參數前的 1-put 約束(驗證)注解
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public void create(@RequestBody @NotEmpty SampleRequest request) {
.....
}
2-在類上放置@Validated
@Validated
public class testController{
//..
}
最后,我們有
@Validated
public class testController{
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public void create(@RequestBody @NotEmpty SampleRequest request) {
//..
}
}
一些有用的鏈接
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.