Spring Framework验证请求参数或路径变量

时间:2010-11-18 16:17:21

标签: spring spring-mvc

我知道我可以在Spring中验证表单,但是我可以对URL参数应用类似的验证吗?例如,我的控制器中有一个方法如下:

public String edit(@PathVariable("system") String system, 
    @RequestParam(value="group") String group,
    ModelMap model) throws DAOException {

我可以在调用方法之前验证systemgroup的值,以确保它们具有特定值或与某个正则表达式匹配吗?

由于

3 个答案:

答案 0 :(得分:0)

您可能可以使用Spring Asserts。 Assert api(http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/util/Assert.html)针对指定的参数运行提供的表达式,如果表达式等于false则它引发了异常。

例: Assert.isTrue(system.equals(“ValidSystemName”),“你必须提供一个有效的系统”);

它还包含检查参数不为空或不是空字符串等的函数。

答案 1 :(得分:0)

  • 创建一个注释,用于标记应验证的参数。此注释需要@Retention RUNTIME@Target ElementType.PARAMETER
  • 创建一个实现为AspectJ Aspect的验证器。
  • 使用此验证器包裹对控制器的调用。

示例注释:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
@Documented
public @interface ValidSystemParameter {
}

示例验证器:

@Aspect
public class ValidSystemParameterValidator {
    @Pointcut("TODO: write your pointcut expression")
    public void controllerMethodWithValidSystemParameter();

    @Before(pointcut = "controllerMethodWithValidSystemParameter()")
    public void validateSystemParameter(String systemParameter) {
        // validate the parameter (throwing an exception)
    }
}

要了解AspectJ切入点表达式语言,请参阅:http://www.eclipse.org/aspectj/doc/released/progguide/language-joinPoints.html

要了解Spring中的AspectJ集成,请参阅:http://static.springsource.org/spring/docs/current/spring-framework-reference/html/aop.html#aop-ataspectj

答案 2 :(得分:0)

我可能有点晚了,但是使用Spring 3.0,您可以选择使用@Valid注释进行JSR-303验证。还有一些更具体的注释@DateTimeFormat@NumberFormat。更多详情:http://static.springsource.org/spring/docs/3.0.5.RELEASE/reference/validation.html#validation-mvc 在我看来,你有两个选择:

  • 将请求参数定义为对象和用户JSR-303 验证。
  • 如上所述使用Assert api。

如果您只想对单个值进行简单验证,我会选择后者(这就是我在使用简单的int值检查最大值时所做的事情。)