gpt4 book ai didi

java - 阻止 Spring 根据 Accept header 创建 "Whitelabel Error Page"

转载 作者:太空宇宙 更新时间:2023-11-04 10:44:55 25 4
gpt4 key购买 nike

我有一个带有 REST api 的 Spring Boot 应用程序,它可以生成 JSON 响应。为了处理错误, Controller 使用 response.sendError 定义 ExceptionHandler:

@ExceptionHandler(MyApiException.class)
public void handleControllerException(MyApiException ex,
HttpServletResponse response) throws IOException {
response.sendError(ex.getStatus().value(), ex.getResponseMessage());
}

这通常会导致 JSON 错误响应,如下所示:

{"timestamp":"2018-01-30T11:22:33.456Z", "status":400, "error":"Bad Request",
"message":"No customer with ID 123 found", "path":"/my/api/endpoint"}

但是,如果客户端发送一个 Accept header 表明它支持 html,例如 text/html 或类似的,Spring 会回退到 HTML 错误页面(此处表示为纯文本):

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.
Tue Jan 30 11:22:33 CET 2018
There was an unexpected error (type=Bad Request, status=400).
No customer with ID 123 found

如何让 Spring 禁用此行为并始终使用 JSON 进行响应?我发现了一些覆盖或禁用 Spring 错误页面的通用方法,但这似乎相当复杂,并且通常旨在提供自定义的错误页面。这只是使用浏览器进行手动调试期间的一个小烦恼(实际客户端不会发送有问题的 Accept header ),因此我无法证明对应用程序进行重大更改是合理的。有没有一种简单的方法可以阻止 Spring 根据 Accept header 切换到 HTML 错误页面?

最佳答案

@ResponseBody注释和响应对象添加到handleControllerException方法`。你的方法看起来像这样

@ResponseBody
@ExceptionHandler(MyApiException.class)
public ErrorModel handleControllerException(MyApiException ex,
HttpServletResponse response) throws IOException {
final int status = HttpStatus.INTERNAL_SERVER_ERROR.value();
// Or any other status
response.setStatus(status);

final ErrorModel errorModel = new ErrorModel();
errorModel.setMessage(ex.getMessage());
return errorModel;
}

关于java - 阻止 Spring 根据 Accept header 创建 "Whitelabel Error Page",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48520164/

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