Spring-Boot - 错误处理

标签 spring spring-mvc error-handling spring-boot

我正在尝试在 Spring-Boot 中为我的 Controller 编写错误处理程序,以捕获大多数可能的错误(Spring、sql 等)。到目前为止,我能够获得带有 Nulls 的 JSON 响应,但是我无法在其中放入任何数据。当我尝试获取错误消息时,我只收到一个空白页。

import java.io.IOException;
import java.sql.SQLException;

import javax.servlet.http.HttpServletRequest;

import org.springframework.boot.autoconfigure.web.ErrorController;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.mvc.multiaction.NoSuchRequestHandlingMethodException;

@RestController
public class BasicErrorController implements ErrorController {
    private static final String ERROR_PATH = "/error";

    @RequestMapping(value=ERROR_PATH)
    @ExceptionHandler(value = {NoSuchRequestHandlingMethodException.class, SQLException.class, IOException.class, RuntimeException.class, Exception.class})
    public ErrorBody defaultErrorHandler(HttpServletRequest request, Exception e) {     
        ErrorBody eBody = new ErrorBody();         
        eBody.setMessage(e.getCause().getMessage());
        return eBody;
    }
}
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class ErrorBody {
    private String dateTime;
    private String exception;
    private String url;
    private String message;
}

最佳答案

你可以这样做:

 @ControllerAdvice
   public class ControllerExceptionTranslator {


    @ExceptionHandler(EntityNotFoundException.class)
    @ResponseStatus(HttpStatus.NOT_FOUND)
    @ResponseBody
    SimpleErrorMessage handleException(EntityNotFoundException exception){
        log.debug("Entity Not Found Exception {}",exception.getMessage());
        log.trace(exception.getMessage(),exception);
        return new SimpleErrorMessage("Entity not found","This resource was not found");
    }


    @ExceptionHandler({UsernameNotFoundException.class})
    @ResponseStatus(HttpStatus.UNAUTHORIZED)
    @ResponseBody
    SimpleErrorMessage handleException(UsernameNotFoundException exception){
        log.debug("Username not found {}",exception.getLocalizedMessage());
        log.trace(exception.getMessage(),exception);
        return new SimpleErrorMessage("Unaouthorized"," ");
    }


}

关于Spring-Boot - 错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28501154/

相关文章:

javascript - Extjs 4.2 创建一个全局数据错误处理,它将被实现覆盖

php - `!(error_reporting() & $errorcode)`(PHP)是做什么的?

php - 如何在 PHP 中获取有用的错误消息?

java - 如何在 Spring MVC 中检索 ErrorField 的错误消息

java - Spring 和数据问题

java - 使用 log4j SMTPAppender 将日志发送到电子邮件

java - Netbeans 8.2 : How to stop embedded Tomcat in Spring. 在 osx 上引导项目?

HTML 不要在 Spring 应用程序中使用我的 css

java - 如何将 Spring MVC 连接到远程 MongoDB,以使用 MongoOperations 接口(interface)?

java - Spring,Tomcat 试图在 server.xml 中设置上下文 URL 路径,但它不起作用