我知道我可以在Spring中验证表单,但是我可以对URL参数应用类似的验证吗?例如,我的控制器中有一个方法如下:
public String edit(@PathVariable("system") String system,
@RequestParam(value="group") String group,
ModelMap model) throws DAOException {
我可以在调用方法之前验证system
和group
的值,以确保它们具有特定值或与某个正则表达式匹配吗?
由于
答案 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
。示例注释:
@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
在我看来,你有两个选择:
如果您只想对单个值进行简单验证,我会选择后者(这就是我在使用简单的int值检查最大值时所做的事情。)