Ele*_*a T 2 java validation spring hibernate bean-validation
为什么spring验证比自己验证慢?我想避免编写自己的验证器。
购物车中有 20,000 件商品(没有导致验证异常)并调用我们在这些时间获得的两个其余端点:/test/spring -> 62.145 ms /test/own -> 11.35 ms
两个端点都运行了 200 次。得到的时间是平均时间。带有 20.000 件商品的购物车当然是不现实的,这也不是重点。
@RequestMapping(path = "/spring", method = RequestMethod.POST)
public ResponseEntity<Object> postSpringValidation(@RequestBody **@Valid** Cart cart) {
return new ResponseEntity<>(HttpStatus.CREATED);
}
@RequestMapping(path = "/own", method = RequestMethod.POST)
public ResponseEntity<Object> postOwnValidation(@RequestBody Cart cart) {
if (!cart.isValidData()) {
throw new InvalidParameterException("invalid data");
}
return new ResponseEntity<>(HttpStatus.CREATED);
}
public class Cart {
@NotNull
private String id;
@Valid
@NotNull
private List<Item> items;
public boolean isValidData() {
if (id == null)
return false;
for (Item item : items) {
if (!item.isValidData()) {
return false;
}
}
return true;
}
}
public class Item {
@NotNull
private String id;
public boolean isValidData() {
if (id == null)
return false;
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
该验证程序的部分解释了发生在验证时触发。您必须考虑全局验证框架的工作中涉及的内容。
您需要有某种方法来检测哪些类已声明约束,哪些类未声明
您需要一种方法来区分构造函数/方法/字段约束
您需要实现某种对象图来验证深度嵌套的结构
与在您的类中使用一个执行验证的内嵌方法相比,操作整个验证基础结构预计会更繁重。
与自定义实现相比,拥有统一的应用验证方式更好。自定义实现容易出错且难以维护。
与自定义验证相比,任何验证框架的性能开销都应该可以忽略不计。
您为您的产品创建了不切实际的案例。我怀疑您是否有人一次购买 2 万件商品。即使您允许,客户也无法付款。大多数支付提供商和银行会将此交易标记为荒谬并予以否认。
归档时间: |
|
查看次数: |
2729 次 |
最近记录: |