以下是方案,使用@RestController
注释的控制器和PUT
方法,其@RequestBody
参数需要进行验证。我在参数上使用@Valid
注释,在bean字段上使用@NotNull
,@Min
注释,但它们不起作用。
代码在这里:
豆子: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;
}
控制器
@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
仍无法正常工作......
有什么想法吗?
答案 0 :(得分:4)
我想出来了......因为实现PurchaseWrapperValidator
的{{1}}会覆盖默认的org.springframework.validation.Validator
注释。
答案 1 :(得分:0)
在pom.xml中放置一个依赖项。或者,在start.spring.io中选择“依赖关系验证”。
依赖性: groupId org.springframework.boot groupId artifactId spring-boot-starter-validationartifactId