CustomExceptionHandler无法在Spring Boot中捕获异常

时间:2018-12-21 12:25:08

标签: spring-boot

在我的Spring Boot应用程序中,我使用@ControllerAdvice和一个自定义异常ServerException创建了一个自定义异常处理程序,但是当我抛出该自定义异常时,它不会被我的customExcpetionHandler捕获。我能够检查是否实际抛出了异常,是否正按日志所示抛出异常。

以下是我的ServerException的代码:

public class ServerException extends Exception {

/**
 * 
 */
private static final long serialVersionUID = <uid>;

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

}

下面是我的GlobalCustomExceptionHandler类:

@ControllerAdvice
@EnableWebMvc
public class GlobalCustomExceptionHandler extends ResponseEntityExceptionHandler{

@ExceptionHandler(ServerException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
public ModelMap handleServerException(ServerException ex) {
    ModelMap modelMap = new ModelMap();
    modelMap.addAttribute("status", "ERROR_400_Bad_Request");
    modelMap.addAttribute("error_message", ex.getMessage());
    return modelMap;
}

}

我在restcontroller之一中抛出异常,如下所示:

throw new ServerException("invalid server configs");

但是我只能看到异常被打印到日志文件中,而不能作为GlobalCustomExceptionHandler类的handleServerException()方法中提到的响应来获取。

可能是什么原因?

1 个答案:

答案 0 :(得分:1)

我刚刚使用简单的REST端点复制了您复制粘贴的代码,并且可以按预期工作:

@RestController
public class SystemController {
    @GetMapping(value = "/system")
    public ResponseEntity<Object> getSystem() throws ServerException {
        if (true)
            throw new ServerException("Checking this out");
        return new ResponseEntity<>(HttpStatus.OK);
    }
}

呼叫http://localhost:8080/system

结果:

{"status":"ERROR_400_Bad_Request","error_message":"Checking this out"}

我需要更大的图景来帮助您。粘贴该控制器以及主应用程序配置类。