java自定义异常及异常的抛出

Posted 仙子说

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java自定义异常及异常的抛出相关的知识,希望对你有一定的参考价值。

在项目的开发过程中前后端一般会遇到很多的异常,这些异常的处理后端通常会通过throw出一个对象,前端再将接收到的异常对象code和message进行二次判断

或直接将message显示给用户,用户再去操作界面。

后端对于异常的定义及处理

一.首先定义一个返回的异常对象

public class BaseBusinessException extends RuntimeException {


private Integer code;

   private String message;

public BaseBusinessException(Integer code,String message) {
super(message);
this.code = code;
}

public Integer getCode() {
return code;
}

public void setCode(Integer code) {
this.code = code;
}
}
二.定义一个自定义的异常处理类,方便对各种类型的异常进行抛出。
/**
* 自定义异常处理类
* 针对不同的异常自定义不同的方法
* 环绕通知
* 切面:针对所有的controller中抛出的异常
* 若使用@ControllerAdvice,则不会自动转换为JSON格式
*/
@RestControllerAdvice
public class RestExceptionHandler {

/**
* 业务异常处理
* @param e
* @return ErrorInfo
*/
@ExceptionHandler({BaseBusinessException.class})
public ResponseEntity<ErrorInfo> businessExceptionHandler(HttpServletRequest request,BaseBusinessException e) throws BaseBusinessException {
return new ResponseEntity(new ErrorInfo(e.getCode(),e.getMessage()), HttpStatus.CONFLICT);
}

/**
* 业务异常处理
* @param e
* @return ErrorInfo
*/
@ExceptionHandler({AccessDeniedException.class})
public ResponseEntity<ErrorInfo> BusinessExceptionHandler(HttpServletRequest request, AccessDeniedException e) throws BaseBusinessException {
return new ResponseEntity(new ErrorInfo(401, e.getMessage()), HttpStatus.UNAUTHORIZED);
}

/**
* 只要抛出该类型异常,则由此方法处理
* 并由此方法响应出异常状态码及消息
* 如:RoleController.getRoleById(String id)方法
* @param request
* @param e
* @return
* @throws Exception
*/
@ExceptionHandler(value = Exception.class)
public ResponseEntity<ErrorInfo> handleException(HttpServletRequest request, Exception e) throws Exception {

ErrorInfo body = new ErrorInfo();
body.setCode(500);
body.setMessage(e.getMessage());

//可以根据公司情况不同,类似的异常可能需要不同的状态码
ResponseEntity<ErrorInfo> responseEntity = new ResponseEntity<ErrorInfo>(body, HttpStatus.INTERNAL_SERVER_ERROR);
return responseEntity;
}

}
三.在业务处理过程中(一般是Service类中),遇到已知的,需要向客户端展示的业务异常,通过throw一个自己定义的异常对象抛出异常。
public void updatePassword(String userCode,String oldPassword,String newPassword,String newNextPassword){
Employee employee=employeeRepository.findEmployeeByCode(userCode);
if(null == employee){
throw new BaseBusinessException(409,"用户不存在");
}
if(!newPassword.equals(newNextPassword)){
throw new BaseBusinessException(409,"两次新密码输入不一致");
}

}
四,在异常的对象返回值中code一般是根据各公司不同的使用情况进行综合定义,后端只需调用即可。
 

以上是关于java自定义异常及异常的抛出的主要内容,如果未能解决你的问题,请参考以下文章

java-异常处理和线程的一些简单方法及使用

Java中异常的抛出方式

Java中异常的抛出方式

PHP 的异常处理错误的抛出及错误回调函数 (转)

一文读懂 JAVA 异常处理

一文读懂 JAVA 异常处理