簡體   English   中英

Spring MVC方法中對字符串的休眠驗證器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM