📜  Spring – MVC 正则表达式验证(1)

📅  最后修改于: 2023-12-03 15:20:13.579000             🧑  作者: Mango

Spring – MVC 正则表达式验证

在 Spring MVC 中,我们可以使用正则表达式来验证用户的输入数据。这可以帮助我们避免一些常见的安全漏洞和错误输入。

在控制器中使用正则表达式验证

在 Spring MVC 中,您可以在控制器中使用 @Valid@Pattern 注解来验证用户的输入数据。例如:

@PostMapping("/register")
public String registerUser(@Valid User user, BindingResult result) {
    if (result.hasErrors()) {
        return "registrationPage";
    }

    userService.saveUser(user);
    return "redirect:/login";
}

在上面的代码中,@Valid 注解将会验证 User 对象中的所有字段。如果有任何错误,BindingResult 对象将会包含这些错误。

您还可以使用 @Pattern 注解来验证字段是否符合指定的正则表达式。例如:

@Pattern(regexp = "\\b[\\w.%-]+@[-.\\w]+\\.[A-Za-z]{2,4}\\b", message = "Invalid email address")
private String email;

在上面的代码中,email 字段将会使用正则表达式 \b[\w.%-]+@[-.\w]+\.[A-Za-z]{2,4}\b 进行验证。如果字段内容不符合该正则表达式,将会返回错误信息 Invalid email address

自定义验证器

如果您需要更复杂的验证逻辑,您可以自定义验证器。例如,您可以创建一个验证器来验证输入的电话号码是否符合规范:

public class PhoneNumberValidator implements Validator {
    private Pattern pattern = Pattern.compile("\\d{3}-\\d{4}-\\d{4}");

    @Override
    public boolean supports(Class<?> clazz) {
        return String.class.equals(clazz);
    }

    @Override
    public void validate(Object obj, Errors errors) {
        String phoneNumber = (String) obj;

        if (!pattern.matcher(phoneNumber).matches()) {
            errors.rejectValue("phoneNumber", "phoneNumber.invalid", "Invalid phone number format");
        }
    }
}

在上面的代码中,PhoneNumberValidator 类使用了正则表达式 \d{3}-\d{4}-\d{4} 来验证电话号码是否符合规范。如果验证失败,将会返回错误信息 Invalid phone number format

在 Spring 配置文件中注册验证器

要使用自定义的验证器,您需要在 Spring 配置文件中注册该验证器。例如:

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
    <property name="validationMessageSource">
        <bean class="org.springframework.context.support.ResourceBundleMessageSource">
            <property name="basename" value="messages"/>
        </bean>
    </property>
</bean>

<bean id="phoneNumberValidator" class="com.example.PhoneNumberValidator"/>

<mvc:annotation-driven validator="validator"/>

<bean class="org.springframework.validation.beanvalidation.MethodValidationPostProcessor">
    <property name="validator" ref="validator"/>
</bean>

在上面的代码中,<mvc:annotation-driven> 元素告诉 Spring MVC 使用 validator 属性所指定的验证器进行验证。MethodValidationPostProcessor 是一个后处理器,它可以使 Spring MVC 支持方法级别的验证。