( 五 )异常处理

SpringBoot异常默认处理机制

 

springboot项目中对于异常有自己的处理方式;区分浏览器(返回错误页面)与其他处理方式(返回Json格式数据)

例如访问一个不存在的页面

localhost:8080/xxx  该Url不存在

默认:

加入在resources目录下创建/resources/error目录,目录中创建对应错误码页面,则错误请求会返回对应的页面

 

自定义异常:

// 1)创建异常自定义类 继承RunTimeException
public class UserNotExistException extends RuntimeException {
    private static final long serialVersionUID = -6112780192479692859L;
    private String id;
    public UserNotExistException(){
        super("user not exist!!");
    }
}
// 2)在接口中抛出了该异常
throw new UserNotExistException();

3)使用restlet client 测试接口;message信息为自定义的信息,状态:500

 

自定义异常处理器

当请求的接口抛出了异常时会进入ControllerExceptionHandler异常处理器

当抛出的异常是UserNotExistException时会进入handlerUserNotExistException方法,最终返回一个json

// 异常处理器
@ControllerAdvice // 处理其他controller抛出来的异常
public class ControllerExceptionHandler {

    @ExceptionHandler(UserNotExistException.class) // 此方法处理UserNotExistException异常
    @ResponseBody
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) // 服务器内部错误
    public Map<String,Object> handlerUserNotExistException(UserNotExistException ex){
        Map<String,Object> result = new HashMap<>();
        result.put("id",ex.getId());
        return result;
    }
}

 

再次请求:http://localhost:8060/user/1

返回 :{"id": "1"}

假如有一个需求:现有一个方法是GET请求,但是你使用POST访问;提示 POST请求不被支持

代码实现如下:


import com.imooc.exception.UserNotExistException;
import org.springframework.http.HttpStatus;
import org.springframework.web.HttpRequestMethodNotSupportedException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;

import java.util.HashMap;
import java.util.Map;

// 异常处理器
@ControllerAdvice // 处理其他controller抛出来的异常
public class ControllerExceptionHandler{
    
    // HttpRequestMethodNotSupportedException 处理
    @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
    @ResponseBody
    @ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED)
    public Map<String,Object> handlerUserNotSupportedException(HttpRequestMethodNotSupportedException ex){
        String message = ex.getMessage();
        String method = ex.getMethod();
        Class<? extends HttpRequestMethodNotSupportedException> aClass = ex.getClass();

        Map<String,Object> result = new HashMap<>();
        result.put("message",method +"请求不被支持");
        result.put("status",405);
        return result;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值