@ExceptionHandler使用案例 java异常处理(注册重复) 将异常写入log 并返回给前端

本文介绍了如何在Java程序中捕获并处理`SQLIntegrityConstraintViolationException`,重点是解析错误消息以提取重复的用户名,并将其转化为前端可理解的错误信息。

首先在java的log中找到引发错误所抛出的Exception

###Error updating database. java.sql.SQLInterityConstrainViolationException :

Duplicate entry 'zhangsan' for key 'employee.idx_username'

需要分析的点有两个

SQLInterityConstrainViolationException

提取出这里的exception类型

'zhangsan'

同时提取出这里的id后续用来说明这个id已经重复

@ExceptionHandler
public Result exceptionHandler(SQLIntegrityConstraintViolationException ex){
    //Duplicate entry 'zhangsan' for key 'employee.idx_username'
    String message = ex.getMessage();
    if(message.contains("Duplicate entry")){
        String[] split = message.split(" ");
        String username = split[2];
        String msg = username + MessageConstant.ALREADY_EXISTS;
        return Result.error(msg);
    }else{
        return Result.error(MessageConstant.UNKNOWN_ERROR);
    }

用Exception类型和 contains函数进行匹配说明确实是该错误

之后用split函数提取出username

最后拼装出msg 用Result封装返回给前端

前端看到的就是

error'zhangsan'用户名已经存在

当我们在编写 Spring MVC 应用程序时,我们可以使用 @ControllerAdvice 注解或者在 Controller 中使用 @ExceptionHandler 注解来处理异常。@ControllerAdvice 注解可以用于全局异常处理,而 @ExceptionHandler 注解则用于处理特定的异常。 下面是一个使用 @ControllerAdvice 注解处理异常的示例: ``` @ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(Exception.class) public ModelAndView handleException(Exception e) { ModelAndView mav = new ModelAndView(); mav.addObject("exception", e); mav.setViewName("error"); return mav; } } ``` 在上面的示例中,我们定义了一个名为 GlobalExceptionHandler 的类,使用 @ControllerAdvice 注解将其标记为全局异常处理器。我们还使用 @ExceptionHandler 注解来处理 Exception 类型的异常。当应用程序中出现 Exception 类型的异常时,Spring MVC 将会调用 handleException 方法来处理该异常返回一个包含异常信息的 ModelAndView 对象。 如果我们想要在 Controller 中处理特定的异常,我们可以使用 @ExceptionHandler 注解。下面是一个使用 @ExceptionHandler 注解处理特定异常的示例: ``` @Controller public class UserController { @ExceptionHandler(UserNotFoundException.class) public ModelAndView handleUserNotFoundException(UserNotFoundException e) { ModelAndView mav = new ModelAndView(); mav.addObject("exception", e); mav.setViewName("userNotFound"); return mav; } @GetMapping("/users/{id}") public String getUser(@PathVariable Long id) { User user = userService.getUserById(id); if (user == null) { throw new UserNotFoundException("User not found with id " + id); } return "userDetails"; } } ``` 在上面的示例中,我们定义了一个名为 UserController 的类,使用 @Controller 注解将其标记为一个 Controller。我们还使用 @ExceptionHandler 注解来处理 UserNotFoundException 类型的异常。当应用程序中出现 UserNotFoundException 类型的异常时,Spring MVC 将会调用 handleUserNotFoundException 方法来处理该异常返回一个包含异常信息的 ModelAndView 对象。 另外,我们还定义了一个名为 getUser 的方法来获取用户信息。如果用户不存在,我们将会抛出一个 UserNotFoundException 异常,该异常将会被 handleUserNotFoundException 方法处理。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值