springboot validation 使用示例
***********************
示例:对参数pojo进行检验
*****************
pojo 层
Order
@Data
public class Order {
@FutureOrPresent(message = "时间不能为过去时间")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime orderTime;
@DecimalMin(value = "0.01",message = "最小值为0.01")
private Double price;
@Min(value = 1,message = "最小值为1")
private Integer amount;
}
*****************
controller 层
HelloController
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello(@Validated Order order,BindingResult result){
System.out.println(order);
if (result.hasFieldErrors()){
result.getFieldErrors().forEach(error -> {
System.out.print("field:"+error.getField());
System.out.println(" ==> defaultMessage:"+error.getDefaultMessage());
});
}
return "success";
}
}
说明:需要在参数前加注解表示需要对参数验证,如不加注解则不验证
***********************
使用测试
localhost:8080/hello?orderTime=2021-07-11 20:20:20&amount=10&price=10
2020-07-13 17:54:01.543 INFO 1284 --- [nio-8080-exec-3] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2020-07-13 17:54:01.553 INFO 1284 --- [nio-8080-exec-3] o.s.web.servlet.DispatcherServlet : Completed initialization in 10 ms
Order(orderTime=2021-07-11T20:20:20, price=10.0, amount=10)
localhost:8080/hello?orderTime=2020-01-10 20:20:20&amount=10&price=0
2020-07-13 18:03:06.877 INFO 1048 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2020-07-13 18:03:06.888 INFO 1048 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 11 ms
Order(orderTime=2020-01-10T20:20:20, price=0.0, amount=10)
field:price ==> defaultMessage:最小值为0.01
field:orderTime ==> defaultMessage:时间不能为过去时间
说明:验证错误信息存储在bindingResult中,仍可正常返回 success
如果不设置bindingResult,则需要自定义异常处理