@Valid注解的使用
@Valid注解用于校验,所属包为:javax.validation.Valid。
1、使用Valid注解之前,需要先在实体类的属性上添加充当校验条件的注解,如Type类下面的name属性不能为空
public class Type {
private Long id; //id
@NotBlank(message = "分类名不能为空!")
private String name; //类型名
}
2、然后在controller层的方法的要校验的参数上添加@Valid注解,并且需要传入BindingResult对象,用于获取校验失败情况下的反馈信息,如下代码:
@PostMapping("/types/edit/{id}")
public String edit(@Valid Type type, BindingResult result,RedirectAttributes attributes) {
List<Type> typeList = typeService.getTypeByName(type.getName());
if (typeList.size()>0){
/*field:绑定需要校验的名字,errorCode:自定义的名称,Message:要输出的错误信息*/
result.rejectValue("name","nameError","修改后的分类名已存在,请重试!");
}
//判断是否有错误信息
if (result.hasErrors()){
return "admin/types-input";
}
return "redirect:/admin/types";
}
同时,bindingResult.getFieldError.getDefaultMessage()用于获取相应字段上添加的message中的内容,如:@NotBlank注解中message属性的内容
3、如何在前端页面展示错误信息
可以通过thymeleaf模板中的th:if="${#fields.hasErrors(‘属性名’)来获取
如何获取属性名呢,可以通过th:object来绑定一个对象,然后通过th:value=*{属性名}来为属性名赋值,最终就可以获取出错的属性
代码如下:
<div class="m-padded-tb-big m-container-small">
<div class="ui container">
<!--绑定type类-->
<form action="#" method="post" class="ui form" th:object="${type}"
th:action="*{id} == null ? @{/admin/types/addType} : @{/admin/types/edit/{id}(id=*{id})}">
<input type="hidden" name="id" th:value="*{id}">
<div class="required field">
<div class="ui left labeled input">
<label class="ui teal basic label">名称</label>
<!--通过th:value给name属性赋值-->
<input type="text" name="name" placeholder="分类名称" th:value="*{name}">
</div>
</div>
<div class="ui error message"></div>
<!--下面代码的注释嵌套,是在静态页面中不会显示,但却可以被thymeleaf所识别-->
<!--/*/
<div class="ui negative message" th:if="${#fields.hasErrors('name')}">
<i class="close icon"></i>
<div class="header">操作失败</div>
<p th:errors="*{name}">提交信息不合规</p>
</div>
/*/-->
<div class="ui right aligned container">
<button type="button" class="ui button" onclick="window.history.go(-1)">返回</button>
<button class="ui teal submit button">提交</button>
</div>
</form>
</div>
</div>