这是一个场景,一个用 @RestController
注释的 Controller 和一个需要验证其 @RequestBody
参数的 PUT
方法。我在参数上使用了 @Valid
注释,在 bean 字段上使用了 @NotNull
、@Min
注释,但它们不起作用。
代码在这里:
bean :
public class PurchaseWrapper {
@DecimalMin(value = "0.00",message = "discount must be positive")
@NotNull
private BigDecimal discount;
@NotNull
private Long merchandiseId;
@NotNull
private Long addressId;
@Min(1)
@NotNull
private Integer count;
}
Controller
@RestController
@RequestMapping("merchandises")
public class MerchandiseController {
@RequestMapping(value = "purchase",method = RequestMethod.PUT)
public ResponseEntity<RestEntity> purchase(@Valid @Validated @RequestBody PurchaseWrapper purchaseWrapper,
@RequestParam String token){
return new ResponseEntity<>(merchandiseService.purchase(purchaseWrapper,token),HttpStatus.OK);
}
@Autowired
PurchaseWrapperValidator purchaseWrapperValidator;
@InitBinder(value = "purchaseWrapper")
protected void initBinder(WebDataBinder binder) {
binder.setValidator(purchaseWrapperValidator);
}
}
pom文件:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
我不知道这里出了什么问题...我想这是我在同一个参数上使用 @Valid
和 @Validated
注释的问题。但是即使我省略了 @Validated
注释,@Valid
仍然不起作用......
有什么想法吗?
最佳答案
我想通了...这是因为实现 org.springframework.validation.Validator
的 PurchaseWrapperValidator
覆盖了默认的 javax.validation.*
注释。
关于java - @Valid 注释在 spring boot 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31175009/