2015-07-02 42 views
2

以下是方案,註釋爲@RestController的控制器和方法的@RequestBody參數需要驗證。我在參數上使用了@Valid註釋,並且在bean字段上註釋了@NotNull,@Min,但它們不起作用。@Valid註釋在彈簧引導中不起作用

代碼是在這裏:

的豆:

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仍然無法正常工作...

任何想法?

回答

4

我想通了......這是因爲org.springframework.validation.Validator覆蓋默認javax.validation.*註釋的PurchaseWrapperValidator