gpt4 book ai didi

java - 防止 Tomcat 覆盖 Controller 建议返回的错误响应

转载 作者:行者123 更新时间:2023-11-28 22:16:06 24 4
gpt4 key购买 nike

我已经实现了一个 RestControllerAdvice 来处理 Spring Boot-Tomcat Web 应用程序中的异常,如下所示:

@RestControllerAdvice 
public class ExceptionHandlerRest{
private Logger logger=LoggerFactory.getLogger(getClass());

@ExceptionHandler(Exception.class)
public ResponseEntity<?> handleException(Exception ex){
logger.error("System Error", ex);
SimpleResponse=new SimpleResponse(ex.getMessage(),"Error code 001"));
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response);
}

}

因此,每当网络请求导致异常时,我都希望上面的处理程序返回状态 500 和一个包含内容的 json:“{“technicalMessage”:“NullPointerException”,“userMessage”:“错误代码 001”

然而,一个 html 错误页面不是打印整个堆栈跟踪,而是如下所示:enter image description here

SimpleResponse 具有以下定义:

public class SimpleResponse{
String technicalMessage,userMessage;

//public getters and setters


}

我已放置调试点并观察到代码流确实正确地到达了 RestControllerAdvice 的 handleException 的返回语句。我认为 tomcat 如何忽略我的响应并显示异常堆栈跟踪。如何让我的应用程序在 json 中返回错误消息?

最佳答案

我可以解决这个问题。这个问题发生在用 @RequestMapping(produces=MediaType.application_pdf_value) 注释的 rest Controller 上。一些当错误被抛出并被错误处理程序接收时,由于实际 Controller 的 produces 属性,POJO 没有被转换为 JSON。我删除了 produces 属性,而是将内容类型显式设置为响应。现在这两种情况都工作正常,下载 pdf 或显示异常消息。

关于java - 防止 Tomcat 覆盖 Controller 建议返回的错误响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50944139/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com