需求: 修改商品时,对商品的属性进行验证,验证商品的名称字符必须是大于1小于30,商品的价格必须输入。
1.添加依赖
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.7.Final</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>3.3.0.Final</version>
</dependency>
2.在springmvc.xml中配置validator,然后再添加到annotation-driven节点中
<mvc:annotation-driven conversion-service="conversionService" validator="validator"></mvc:annotation-driven>
<!-- 配置校验器 -->
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
<!-- 指定校验使用的资源文件,如果不指定则默认使用classpath下的ValidationMessages.properties -->
</bean>
3.在pojo类中编写校验规则
public class Items {
private Integer itemId;
@Size(min=1,max=30,message = "商品名称的长度必须大于1小于30",groups = {Group1.class})
private String itemName;
@NotNull(message = "商品价格不能为空",groups = {Group1.class,Group2.class})
private Long itemPrice;
private String itemDetail;
private Date itemCreateDate;
//get和set方法
}
4.在controller中接受错误信息
//修改商品信息
@RequestMapping(value = "/updateItem")
public ModelAndView updateItem(@RequestParam(value="itemId")Integer item_id, @Validated(value = Group1.class) @ModelAttribute(value="item") ItemsCustom itemsCustom, BindingResult result) throws Exception{
ModelAndView modelAndView = new ModelAndView();
//取校验结果
if (result.hasErrors()) {
//取出所有的错误信息
List<ObjectError> allErrors = result.getAllErrors();
modelAndView.addObject("errors", allErrors);
modelAndView.setViewName("items/selectItem");
return modelAndView;
}
int rs = itemsService.updateItems(item_id,itemsCustom);
if(rs == 1) {
modelAndView.setViewName("items/success");
}else{
modelAndView.setViewName("items/failed");
}
return modelAndView;
}
5.在页面中显示错误信息
<%--显示错误信息--%>
<ul>
<c:forEach items="${errors}" var="error">
<li>${error.defaultMessage}</li>
</c:forEach>
</ul>
6.测试