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自定义异常及异常的抛出的主要内容,如果未能解决你的问题,请参考以下文章