Java 使用复杂业务逻辑和远程服务调用进行Bean验证
我正在为一个web应用程序实现一个输入验证,它相当复杂,需要输入一个ID,并将调用其他几个系统,以便在持久化包含此ID的对象之前检查此ID是否有效。 我曾想过使用bean验证,但后来我发现自己创建了一个bean,专门用于允许进行此验证。事实上,为了进行远程服务调用,我不仅需要向验证器提供ID,还需要提供一些上下文信息 您是否认为bean验证始终是进行验证的正确位置,即使它很复杂并且需要bean范围之外的上下文进行验证 实现业务逻辑验证规则的Spring服务是更好的选择吗 或者其他验证器(Hibernate、Spring)可以更好地处理我的用例Java 使用复杂业务逻辑和远程服务调用进行Bean验证,java,bean-validation,Java,Bean Validation,我正在为一个web应用程序实现一个输入验证,它相当复杂,需要输入一个ID,并将调用其他几个系统,以便在持久化包含此ID的对象之前检查此ID是否有效。 我曾想过使用bean验证,但后来我发现自己创建了一个bean,专门用于允许进行此验证。事实上,为了进行远程服务调用,我不仅需要向验证器提供ID,还需要提供一些上下文信息 您是否认为bean验证始终是进行验证的正确位置,即使它很复杂并且需要bean范围之外的上下文进行验证 实现业务逻辑验证规则的Spring服务是更好的选择吗 或者其他验证器(Hibe
使用Bean验证进行复杂验证的最佳实践是什么?Bean验证最适用于检查来自web表单的用户输入是否正确 若必须在其他系统中验证用户输入,则应将其作为算法中的常规步骤来实现 更新 Bean验证被发明用来代替琐碎乏味的手工验证,比如
if x!=null&&x<0然后是doReject()
,带有优雅的简短注释,如@Min(1)
如果您的id验证不是微不足道的,那么我建议在您的算法中将其实现为清晰可见的操作。与在自定义bean验证中隐藏细节相比,它更易于实现和维护
然而,如果您的验证在您的应用程序中很常见,比如不同答案中描述的法语zip验证,那么最好实现自定义bean验证并在许多地方重用它。bean验证最适用于检查来自web表单的用户输入是否正确 若必须在其他系统中验证用户输入,则应将其作为算法中的常规步骤来实现 更新 Bean验证被发明用来代替琐碎乏味的手工验证,比如
if x!=null&&x<0然后是doReject()
,带有优雅的简短注释,如@Min(1)
如果您的id验证不是微不足道的,那么我建议在您的算法中将其实现为清晰可见的操作。与在自定义bean验证中隐藏细节相比,它更易于实现和维护
然而,如果您的验证在您的应用程序中很常见,比如不同答案中描述的法语zip验证,那么最好实现自定义bean验证并在许多地方重用它。bean验证最适用于检查来自web表单的用户输入是否正确 若必须在其他系统中验证用户输入,则应将其作为算法中的常规步骤来实现 更新 Bean验证被发明用来代替琐碎乏味的手工验证,比如
if x!=null&&x<0然后是doReject()
,带有优雅的简短注释,如@Min(1)
如果您的id验证不是微不足道的,那么我建议在您的算法中将其实现为清晰可见的操作。与在自定义bean验证中隐藏细节相比,它更易于实现和维护
然而,如果您的验证在您的应用程序中很常见,比如不同答案中描述的法语zip验证,那么最好实现自定义bean验证并在许多地方重用它。bean验证最适用于检查来自web表单的用户输入是否正确 若必须在其他系统中验证用户输入,则应将其作为算法中的常规步骤来实现 更新 Bean验证被发明用来代替琐碎乏味的手工验证,比如
if x!=null&&x<0然后是doReject()
,带有优雅的简短注释,如@Min(1)
如果您的id验证不是微不足道的,那么我建议在您的算法中将其实现为清晰可见的操作。与在自定义bean验证中隐藏细节相比,它更易于实现和维护
但是,如果您的验证在应用程序中很常见,比如不同答案中描述的法语zip验证,那么最好实现自定义bean验证并在许多地方重用它。答案是肯定的。您可以开发CDI服务Bean(例如@ApplicationScoped)并将此CDI Bean注入ConstraintValidator类 您可以在Java bean验证规范页面中看到一个示例: 类ZipCodeValidator实现ConstraintValidator{ @注入 私人拉链服务; public void initialize(ZipCode ZipCode){} 公共布尔值有效(字符串值,ConstraintValidationContext){ if(value==null)返回true; 返回服务.isZipCodeValid(值); } }
答案是肯定的。您可以开发CDI服务Bean(例如@ApplicationScoped)并将此CDI Bean注入ConstraintValidator类 您可以在Java bean验证规范页面中看到一个示例: 类ZipCodeValidator实现ConstraintValidator{ @注入 私人拉链服务; public void initialize(ZipCode ZipCode){} 公共布尔值有效(字符串值,ConstraintValidationContext){ if(value==null)返回true; 返回服务.isZipCodeValid(值); } }
答案是肯定的。您可以开发CDI服务Bean(例如@ApplicationScoped)并将此CDI Bean注入ConstraintValidator类 您可以在Java bean验证规范页面中看到一个示例: 类ZipCodeValidator实现ConstraintValidator{ @注入 私人拉链服务; public void initialize(ZipCode ZipCode){} 公共布尔值有效(字符串值,ConstraintValidationContext){ if(value==null)返回true; 返回服务.isZipCodeValid(值); } }
答案是肯定的。您可以开发CDI服务Bean(例如@ApplicationScoped)a
class ZipCodeValidator implements ConstraintValidator<ZipCode, String> {
@Inject
private ZipService service;
public void initialize(ZipCode zipCode) {}
public boolean isValid(String value, ConstraintValidationContext context) {
if (value==null) return true;
return service.isZipCodeValid(value);
}
}