新增实体时,有时需要前端传入的实体的一些字段不能为空,虽然检测必填字段是否为空,这一工作一般由前端完成,但是后端也必须校验:
1.在实体类上添加注解:
有三种注解:分别对应不同的字段类型:
@NotNull 验证对象是否不为null, 无法查检长度为0的字符串
@NotBlank 检查约束 (字符串) 是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
@NotEmpty 检查(集合)约束元素是否为NULL或者是EMPTY.
验证时间格式:
@Future( message = "开始时间必须是一个将来的日期")
@NotNull (message = "开始时间不能为空")
private Date startTime;
@NotNull(message = "文章展示方式不能为空")
private Integer style;
@NotEmpty(message = "地址不能为空")
private List<String> addressID;
@NotBlank(message = "备注不能为空")
private String comment;
2.controller层:
由于前端传入的是实体,所以使用@RequestBody 注解让其传入json格式【后端接收实体时,一般都用@RequestBody 】,注意 :
@RequestBody 不能和 @GetMapping 连用, 一般是和@PostMapping连用
检测: 注意:BindingResult result 要用 ,getErrors是自定义方法
AjaxResult 是响应式返回结果:一般都是由 code ,msg,data 这三者构成,很多公司都是类似的,只是名字不同
@PostMapping("/createArticle")
@ResponseBody
public AjaxResult createArticle(@RequestBody @Valid CreatexxVo vo, BindingResult result ) {
if (result.hasErrors()){
Map<String,String> errorMap=rdArticleService.getErrors(result);
return AjaxResult.error("创建失败,一些必填字段不能为空",errorMap);
}
int res=rdArticleService.createxx(vo);
if (res>0){
return AjaxResult.success("添加成功");
}else {
return AjaxResult.error("添加失败");
}
}
3. service 层: 通用,对所有实体都适用
@Override
/**
* @Author: liup
* @date: 2021/4/30
方法实现说明: 该方法是配合 create接口 使用,目的是:在判断前端传入的字段哪些违背了不能为空的要求,返回信息给前端
*/
public Map<String, String> getErrors(BindingResult result) {
Map<String, String> map = new HashMap<>();
List<FieldError> errorList = result.getFieldErrors();
for (FieldError error : errorList) {
// 发生验证错误所对应的某一个属性
String errorField = error.getField();
// 验证错误的信息
String errorMsg = error.getDefaultMessage();
map.put(errorField, errorMsg);
}
return map;
}
4.结果: 有提示信息