[英]Hibernate validator in Spring MVC method on String
我有一個控制器方法,該方法將String作為參數。
我想使用休眠驗證器來驗證輸入,但是我真的不想只為此創建一個對象。
有什么辦法可以在一行的String上使用休眠驗證器?
如果沒有,請隨意建議其他方法。
您可以在應用程序上下文中使用此配置
<bean id="validatorFactory" class="javax.validation.Validation" factory-method="buildDefaultValidatorFactory" />
<bean id="validator" factory-bean="validatorFactory" factory-method="getValidator" />
然后按照以下步驟將此驗證器注入服務或組件中。
/**
*
*/
@Component
public class ValidationService {
@Autowired
private Validator validator;
/**
* Check the Set and return the errors that it contains.
*
* @param errors
* @return Errors found
* @since Jan 15, 2014
*/
public String returnErrors(final Set<ConstraintViolation<Object>> errors) {
final StringBuilder builder = new StringBuilder();
for (final ConstraintViolation<Object> error : errors) {
builder.append(error.getMessage());
}
return builder.toString();
}
/**
* Validate entities using JSR 303
*
* @param object
*
* @param classes
* @throws IllegalArgumentException
* @since Jan 15, 2014
*/
public void validateEntity(final Object object, final Class<? extends Default>... classes) {
final Set<ConstraintViolation<Object>> errors = validator.validate(object, classes);
if (!errors.isEmpty()) {
throw new IllegalArgumentException(returnErrors(errors));
}
}
}
之后,您可以在所需的每個類中使用並注入服務。
validationService.validateEntity(salesForceForm, PriceChangeRequestGroup.class);
請在下面使用休眠驗證器的簡單Java應用程序中的代碼下找到。
package testjarcopy;
import java.lang.reflect.Method;
import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.ValidatorFactory;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.validation.executable.ExecutableValidator;
public class TestCopy {
public static void main(String[] args) throws NoSuchMethodException,
SecurityException {
TestCopy object = new TestCopy();
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Method method = TestCopy.class.getMethod("placeOrder", String.class, int.class);
Object[] parameterValues = { "12", 6 };
ExecutableValidator executableValidator = factory.getValidator().forExecutables();
Set<ConstraintViolation<TestCopy>> violations = executableValidator.validateParameters(object, method, parameterValues);
System.out.println("violations.size=" + violations.size());
}
public void placeOrder(
@NotNull @Size(min = 3, max = 5) String customerCode,
@Min(6) int quantity) {
System.out.println("running in method..." + customerCode);
}
}
以下是您需要添加的依賴關系。
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.1.3.Final</version>
</dependency>
<dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>2.2.4</version>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>javax.el</artifactId>
<version>2.2.4</version>
</dependency>
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.