SSM项目 添加统一异常支持 #私藏项目实操分享#

2021年11月24日 阅读数:3
这篇文章主要向大家介绍SSM项目 添加统一异常支持 #私藏项目实操分享#,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

自定义异常

GlobalException.java

@Getter

@NoArgsConstructor

@AllArgsConstructor

public class GlobalException extends RuntimeException {



/**

* 异常错误代码
*/


private Integer code;

/**

* 异常信息
*/

private String msg;



}

ModelAndViewException.java

@Getter

@NoArgsConstructor

@AllArgsConstructor

public class ModelAndViewException extends RuntimeException {

private staticfinal long
serialVersionUID = -8026823680962105189L;

/**

* 异常错误编码
*/



private Integer code;



/**

* 异常信息
*/

private String msg;



public static ModelAndViewException
transfer(GlobalException e) {

ModelAndViewExceptionexception
= new ModelAndViewException(e.getCode(),e.getMsg());

return exception;

}



}

 

异常处理器

@Slf4j

@ControllerAdvice

public class GlobalExceptionHandler {



@ExceptionHandler(ModelAndViewException.class)

public ModelAndView viewExceptionHandler(HttpServletRequest
req, ModelAndViewException e) {

// 打印异常信息
log.error("### 异常信息:{} ###", e.getMessage());



ModelAndView mav = new ModelAndView();

//将异常信息设置如modelAndView

mav.addObject("ex", e);


mav.addObject("url",req.getContextPath
()+"/index.jsp");

mav.setViewName("error");

//返回ModelAndView

return mav;

}



/**

* 处理自定义异常
*/

@ResponseBody

@ExceptionHandler(GlobalException.class)

public Result handleException(GlobalException e) {

// 打印异常信息
log.error("### 异常信息:{} ###", e.getMessage());

return new Result(e.getCode(),e.getMsg(),null);

}

}

 

控制器

@Slf4j

@Controller

@RequestMapping("/user")

public class UserController {




@Resource

private UserService userService;


@GetMapping("/fun")

public void fun(){

throw new ModelAndViewException(100,"fdasfasda");

}



@GetMapping("/fun2")

public void fun2(){

throw new GlobalException(100,"fdasfasda");

}


}

 

测试结果