在weapon项目中,表单在客户端实现了校验,简单而有效。但是还要提防可能出现的客户端校验失效问题,在这种情况下也要做到服务器端不会录入问题数据。这就需要服务器端校验。
spring 3.0引入了jsr 303的java校验工具框架。
需要导入的类库:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.0.0.GA</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.5.6</version>
</dependency>
spring的配置:
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="webBindingInitializer">
<bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
<property name="validator" ref="validator" />
</bean>
</property>
</bean>
<bean id="validator" class="org.springframework.validation.beanvalidation.
LocalValidatorFactoryBean" />
然后写点儿代码即可。首先是domain对象,就是javabean,要校验的名词对象,需要这样写:
@NotNull
@NotEmpty
private String name;
表示不能为空,也不能为空字串。这里NotEmpty不是jsr303标准的注解,是hibernate扩展的。
使用校验:
@RequestMapping(value = "/save.json", method = RequestMethod.POST)
public String save(@Valid Weapon weapon, BindingResult results) {
if (results.hasErrors()) {
throw new RuntimeException(results.getAllErrors().toString());
}
if (weapon.getId() == null || weapon.getId().isEmpty()) {
create(weapon);
} else {
update(weapon);
}
return "saved";
}
在这里通过Valid注解,标注需要校验的变量。后面的BindingResult,是存储错误信息的对象。这里做的很简单,如果校验有错误,将直接抛出runtime异常。
因为正常情况下都应该通过客户端的校验机制处理了。
这里将客户端校验代码屏蔽,测试到的结果是返回了异常:
java.lang.RuntimeException: [Field error in object
'weapon' on field 'name': rejected value []; codes
[NotEmpty.weapon.name,NotEmpty.name,NotEmpty.java.lang.String,NotEmpty];
arguments
[org.springframework.context.support.DefaultMessageSourceResolvable:
codes [weapon.name,name]; arguments []; default message
[name],{org.hibernate.validator.constraints.NotEmpty.message},[Ljava.lang.Class;@1d6ced0,[Ljava.lang.Class;@1a3ece5];
default message [may not be empty]]
at com.easymorse.weapons.server.WeaponService.save(WeaponService.java:74)
另外,还可以在注解中使用提示信息,比如:
@NotEmpty(message=”请输入名称”)
还有,校验注释有:
@Pattern(regex=, flag=)
这是标准的,可以写正则表达式。
spring 3.0中的校验
最新推荐文章于 2023-03-27 19:55:26 发布