gpt4 book ai didi

Spring @ControllerAdvice 与 ErrorController

转载 作者:行者123 更新时间:2023-12-04 04:37:13 24 4
gpt4 key购买 nike

在我的 REST 服务应用程序中,我计划创建一个 @ControllerAdvice捕获 Controller 抛出的异常并返回 ResponseEntity 的类对象根据错误类型。

但我已经有一个 @RestController实现 ErrorController 的类捕获所有异常的接口(interface)。

这两者有任何干扰吗?
在哪些情况下ErrorController@ControllerAdvice 时调用存在吗?

编辑:ErrorController按要求编码

@RestController
public class ControllerCustomError implements ErrorController{

//error json object
public class ErrorJson {

public Integer status;
public String error;
public String message;
public String timeStamp;
public String trace;

public ErrorJson(int status, Map<String, Object> errorAttributes) {
this.status = status;
this.error = (String) errorAttributes.get("error");
this.message = (String) errorAttributes.get("message");
this.timeStamp = errorAttributes.get("timestamp").toString();
this.trace = (String) errorAttributes.get("trace");
}

}

private static final String PATH = "/error";

@Value("${hybus.error.stacktrace.include}")
private boolean includeStackTrace = false;

@Autowired
private ErrorAttributes errorAttributes;

@RequestMapping(value = PATH)
ErrorJson error(HttpServletRequest request, HttpServletResponse response) {
// Appropriate HTTP response code (e.g. 404 or 500) is automatically set by Spring.
// Here we just define response body.
return new ErrorJson(response.getStatus(), getErrorAttributes(request, includeStackTrace));
}

@Override
public String getErrorPath() {
return PATH;
}

private Map<String, Object> getErrorAttributes(HttpServletRequest request, boolean includeStackTrace) {
RequestAttributes requestAttributes = new ServletRequestAttributes(request);
return errorAttributes.getErrorAttributes(requestAttributes, includeStackTrace);
}
}

最佳答案

ErrorController 的实现用于提供自定义的白标错误页面。

@ControllerAdvise 注释的类用于为整个应用程序添加全局异常处理逻辑。因此,您的应用程序中有多个 Controller 。

如果在您的应用程序中找不到请求或页面的映射,则 spring 将回退到“whitelabel 错误页面”。在这种情况下,它将是 ErrorController 的自定义实现

关于Spring @ControllerAdvice 与 ErrorController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40489606/

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