簡體   English   中英

Spring Rest在@RequestBody中添加@NotEmpty而不創建請求POJO

[英]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) {
      //..
   }

}

一些有用的鏈接

Spring REST 驗證示例

關於使用 Spring Boot 進行 Bean 驗證你需要知道的一切

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM