在实际业务中,springboot的异常处理可能无法满足我们的业务需求,那么就需要我们自定义异常来处理
-
自定义异常
-
package com.zhk.demo.exception; public class OrderNotExistException extends RuntimeException{ private String ordreid; public OrderNotExistException(String ordreid){ super("订单不存在"); this.ordreid = ordreid; } public String getOrdreid() { return ordreid; } }
-
自定义异常处理类
-
package com.zhk.demo.exceptionhander; import com.zhk.demo.exception.OrderNotExistException; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import java.util.HashMap; import java.util.Map; /* ControllerAdvice 说明是异常处理器 ResponseBody 返回json ExceptionHandler指定要处理什么异常 */ @ControllerAdvice @ResponseBody public class MyExceptionHandler { @ExceptionHandler(OrderNotExistException.class) public Map<String,String> handlerOrderException(OrderNotExistException e){ Map<String,String> map = new HashMap<>(); map.put("orderid",e.getOrdreid()); map.put("message", e.getMessage()); return map; } }
-
编写测试类
-
package com.zhk.demo.controller; import com.zhk.demo.exception.OrderNotExistException; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; @Controller @ResponseBody @RequestMapping("/order") public class OrderController { @GetMapping("/{orderid}") @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) public void getOrder(@PathVariable(name = "orderid") String orderid) throws RuntimeException{ if("1".equals(orderid)){ throw new OrderNotExistException(orderid); }else{ throw new RuntimeException("这是系统异常"); } } }
-
测试接口
-