簡體   English   中英

Spring Boot REST控制器:POST和PUT方法的不同自定義驗證器接收同一對象

[英]Spring boot REST controller: different custom validators for POST and PUT methods receiving the same object

我有一個帶有POST和PUT方法的Spring Boot Controller和一個自定義驗證器。

@Autowired
PersonValidator validator;

@InitBinder
protected void initBinder(final WebDataBinder binder) {
binder.addValidators(validator);
}
@PostMapping
public ResponseEntity<String> save(@Valid @RequestBody Person person) {}

@PutMapping
public ResponseEntity<String> update(@Valid @RequestBody Person person) {}

當前,POST和PUT方法都使用相同的驗證規則。 問題 :對於PUT和POST,我需要具有不同的驗證規則。 關於如何進行的任何想法,如何在同一RestController中使用不同的自定義驗證器?

如果您使用的是Spring Boot,則可以在應用程序中集成Hibernate Validator。 似乎您需要實現分組約束( https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#chapter-groups

例如

實體

@NotEmpty(groups = PutValidation.class)
private String field1;

@Size(min = 3, groups = PutValidation.class)
@Size(min = 5, groups = PostValidation.class)
private String field2;

@Min(value = 18, groups = {PostValidation.class,PutValidation.class,Default.class})
private int age;

//Getters/setters

組(這些都是空接口)

public interface PostValidation {
}

public interface PutValidation {
}

如何在Controller中使用約束組

@PostMapping
public ResponseEntity<String> save(@Validated(PostValidation.class) @RequestBody  Person person) {}

@PutMapping
public ResponseEntity<String> update(@Validated(PutValidation.class) @RequestBody Person person) {}

我希望這可以幫助您解決問題。

干杯!

您可以為每個驗證器創建自己的注釋,並在每個端點處替換@Valid。 看看@InRange: https ://lmonkiewicz.com/programming/get-noticed-2017/spring-boot-rest-request-validation/

暫無
暫無

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

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