controller中有如下新增数据的代码
@ApiOperation(value = "add", notes = "新增数据")
@PostMapping("add")
public AjaxResult add(@RequestBody Xxx x) {
return AjaxResult.success(xxxService.save(x));
}
如果想实现数据唯一性检验,并提示用户有如下方法
方法一:代码逻辑层面通过唯一条件查询数据,通过数据是否存在来判断
方法二:在数据库中添加唯一索引,不管有没有在业务层增加限制,唯一索引都是很有必要的,因为阿里巴巴开发规范中这么说
- 在每个插入获取编辑的地方增加try-catch,捕获到异常后判断类型,唯一约束抛出的是这个异常类:java.sql.SQLIntegrityConstraintViolationException.
- 但是这不整齐的try-catch不说,还得所有地方都写一遍
@ApiOperation(value = "add", notes = "新增数据")
@PostMapping("add")
public AjaxResult add(@RequestBody Xxx x) {
try{
xxxService.save(x)
}catch(Exception ){
//判断异常类型,返回错误
return AjaxResult.error("数据重复请确认");
}
return AjaxResult.success();
}
- 重点来啦,我们可以建一个全局的异常处理类,@RestControllerAdvice都是对Controller进行增强的,可以全局捕获spring mvc抛的异常,更详细的内容可以自行学习
- 这样当操作数据库抛出唯一约束的异常后,就可以在这里被捕获到,可以向用户抛出你自定义的友好提示
@ControllerAdvice
public class ControllerException {
@ResponseBody
@ExceptionHandler(SQLIntegrityConstraintViolationException.class)
public AjaxResult sqlUniqueException(SQLIntegrityConstraintViolationException e) {
//将错误信息返回给前台
return AjaxResult.error("数据重复请确认");
}
}
标签:AjaxResult,return,数据,Spring,数据库,public,add,异常,捕获
From: https://blog.51cto.com/u_14958144/9127259