项目应用:自定义异常处理

@ControllerAdvice

spring官方文档上解释:

Indicates the annotated class assists a "Controller".

Serves as a specialization of @Component, allowing forimplementation classes to be autodetected through classpath scanning.

It is typically used to define @ExceptionHandler,@InitBinder, and @ModelAttributemethods that apply to all @RequestMapping methods.

One of annotations(), basePackageClasses(),basePackages() or its alias value()may be specified to define specific subsets of Controllersto assist. When multiple selectors are applied, OR logic is applied -meaning selected Controllers should match at least one selector.

The default behavior (i.e. if used without any selector),the @ControllerAdvice annotated class willassist all known Controllers.

Note that those checks are done at runtime, so adding many attributes and usingmultiple strategies may have negative impacts (complexity, performance).

翻译:

指示带注释的类帮助一个“控制器”。

作为一个专业化的“组件,允许实现类是通过类路径自动扫描。

它通常用于定义@ ExceptionHandler,@和@ modelattributemethods initBinder,适用于所有“requestmapping方法。

一个annotations(),basepackageclasses(),basepackages()或其别名value()可能规定的特定子集,协助controllersto。当多个选择器的应用,或逻辑意义选择的控制器应与至少一个选择器应用。

默认的行为(即如果没有使用任何选择器),“controlleradvice注释将帮助所有已知的控制器类。

请注意,这些检查是在运行时完成的,所以加入了许多属性和多个策略可能有负面影响(复杂性、性能)。

对于作为异常处理的情况下,可以把它当做一个@contorller理解

@ControllerAdvice
public class RestExceptionHandler extends ResponseEntityExceptionHandler  {    
	
	@Autowired
	private  HttpServletRequest httpRequest;
    @ExceptionHandler(value = { InnerHandleException.class })
    public final String handleVMWareException(InnerHandleException ex, WebRequest request) {
        return "/error";
    }    
    @ExceptionHandler(value = { UserNotFoundException.class })
    public final ModelAndView handlePowerException(UserNotFoundException ex, WebRequest request) {
        //如果出现UserNotFoundException异常,则返回登录页,用于记录页面跳转情况下的登录过期处理

        return new ModelAndView(new RedirectView("/login"));

    }
    @ExceptionHandler(value = { UserNotFoundAjaxException.class })
    public final ResponseEntity<?> handleVMWareException(UserNotFoundAjaxException ex, WebRequest request) {

       //如果出现UserNotFoundAjaxException 异常,则返回httpstatus=401,用于记录ajax请求情况下的登录过期处理

       HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.parseMediaType("application/json;charset=UTF-8"));
        return handleExceptionInternal(ex, ex.getMessage(), headers, HttpStatus.UNAUTHORIZED, request);
    }   
}
两个异常的定义

public class UserNotFoundException extends RuntimeException {

    public UserNotFoundException(String message) {
        super(message);
    }

    public UserNotFoundException() {
    }
}
public class UserNotFoundAjaxException extends RuntimeException {

    public UserNotFoundAjaxException(String message) {
        super(message);
    }

    public UserNotFoundAjaxException() {
    }
} 

在service层抛出UserNotFoundException异常并在对应业务的controller层不做catch处理,即可进入@ControllerAdvice标记的异常处理方法。对于页面跳转直接做转到登录页处理,对于ajax请求则通过jquery做处理。

			$.ajax({
	            type: "get",
	            url: "/courses/deljoin",
	            data:{
                            data:data
			 },
	            dataType:"json",
	            error: function(jqXHR, error, errorThrown) {
	                var status_code = jqXHR.status
		                if(status_code==401)//判断是否接收到401状态码
		                {
                                  //返回登录处理
                                   var curWwwPath = window.document.location.href;  
	                	    var pathName = window.document.location.pathname;  
	                	    var pos = curWwwPath.indexOf(pathName);  
	                	    var localhostPath = curWwwPath.substring(0, pos);  
		        	    var url = localhostPath+"/login";
		        	    window.location.href=url;
		                }
	                },
	                success: function(data) {
                               //成功刷新当前页面
				window.location.reload();
	              }




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot项目,可以通过异常处理来处理应用程序出现的异常。Spring Boot提供了多种处理异常的方式,下面介绍两种常用的方式:全局异常处理自定义异常处理。 1. 全局异常处理: 在Spring Boot项目,可以通过定义一个全局异常处理器来统一处理应用程序的异常。可以使用@ControllerAdvice注解和@ExceptionHandler注解来实现全局异常处理。 首先,在项目创建一个类,使用@ControllerAdvice注解标记该类为全局异常处理器。然后,在该类定义一个或多个方法,使用@ExceptionHandler注解标记这些方法来处理具体的异常。例如: ```java @ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(Exception.class) public ResponseEntity<String> handleException(Exception ex) { // 处理异常逻辑... return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Internal Server Error"); } } ``` 上述代码,handleException方法用于处理所有的Exception类型的异常,当应用程序出现Exception类型的异常时,会执行该方法,并返回一个包含错误信息的ResponseEntity对象。 2. 自定义异常处理: 除了全局异常处理外,还可以自定义异常处理来处理特定的异常。可以通过创建自定义的异常类,并在需要抛出异常的地方抛出该异常,然后通过@ControllerAdvice注解和@ExceptionHandler注解来处理该异常。 首先,创建一个自定义的异常类,继承自Exception或其子类。例如: ```java public class MyCustomException extends Exception { public MyCustomException(String message) { super(message); } } ``` 然后,在需要抛出异常的地方抛出该异常。例如: ```java public void myMethod() throws MyCustomException { // 发生异常的逻辑... throw new MyCustomException("Something went wrong"); } ``` 最后,在全局异常处理使用@ExceptionHandler注解来处理该自定义异常。例如: ```java @ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(MyCustomException.class) public ResponseEntity<String> handleMyCustomException(MyCustomException ex) { // 处理自定义异常逻辑... return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ex.getMessage()); } } ``` 上述代码,handleMyCustomException方法用于处理MyCustomException类型的异常,当应用程序出现MyCustomException类型的异常时,会执行该方法,并返回一个包含错误信息的ResponseEntity对象。 使用全局异常处理自定义异常处理可以使得Spring Boot项目异常处理更加灵活和统一。根据具体需求,可以选择适合自己项目异常处理方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值