Spring RestController 将错误返回为 html 而不是 json
Posted
技术标签:
【中文标题】Spring RestController 将错误返回为 html 而不是 json【英文标题】:Spring RestController returning error as html instead of json 【发布时间】:2018-10-29 11:54:13 【问题描述】:我有一个 spring boot webapp,我在其中定义了 REST API。我正在使用 Spring Security 来实现 REST API 安全性。
我已经用 RestController 注释了我的控制器类。 我最近将 spring boot、mvc 和 security 更新到了最新版本。
我现在看到,在我的负面情况下,在更新之前它返回 json 错误响应,但现在在更新之后,它返回 html 错误响应。
在更新之前,它给出了以下错误响应-
"timestamp": "2018-05-21T18:22:37.105+0000",
"status": 500,
"error": "Internal Server Error",
"message": "Error message.",
"path": "<API path>"
更新后,给出如下响应。
<!DOCTYPE html>
<html>
<head>
<title>Apache Tomcat/8.0.51 - Error report</title>
<style type="text/css">H1 font-family:Tahoma,Arial,sansserif;color:white;background-color:#525D76;font-size:22px; H2 font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px; H3 font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px; BODY font-family:Tahoma,Arial,sans-serif;color:black;background-color:white; B font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76; P font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;A color : black;A.name color : black;.line height: 1px; background-color: #525D76; border: none;</style>
</head>
<body>
<h1>HTTP Status 500 - Error message.</h1>
<div class="line"></div>
<p>
<b>type</b> Status report
</p>
<p>
<b>message</b>
<u>Error message.</u>
</p>
<p>
<b>description</b>
<u>The server encountered an internal error that prevented it from fulfilling this request.</u>
</p>
<hr class="line">
<h3>Apache Tomcat/8.0.51</h3>
</body>
</html>
我的控制器中没有任何异常处理程序。默认情况下,它以 json 错误的形式出现。我的库中有 jackson 和 jackson-mapper-asl。
我不知道某处是否存在需要更改以将错误作为 json 发送的默认设置。
我也尝试禁用 ErrorPageFilter,但即便如此,我还是收到了 HTML 响应。
有什么方法可以让我得到 json 响应而不是 html?
【问题讨论】:
您的 mvc 配置是否包含 JSON 的消息转换器? 您能否提供更多详细信息,例如 HTML 错误消息、预期的 JSON 错误消息和 RestController 值。 用示例响应更新了描述 我没有消息转换器的配置。 但我的库中有杰克逊 【参考方案1】:我认为您缺少将产生的响应控制器类型。
将此添加到您的端点:
@ResponseBody
@RequestMapping(value="/xyz", produces="application/json")
public String XYZ()
// Your Code Goes Here
return return new JSONObject("'aa':'bb'");
查看这些帖子:Returning JSON response from spring controller goes as html instead of JSON in javascript 和 Returning JSON object as response in Spring Boot.
【讨论】:
以上是关于Spring RestController 将错误返回为 html 而不是 json的主要内容,如果未能解决你的问题,请参考以下文章
Spring @RestController,spring-boot 出现意外错误(类型=不可接受,状态=406)
内容类型'text/plain;charset = UTF-8'在RestController类中的spring boot中不支持错误
使用 @RestController 在 Spring Boot 中发布数据时出错
@Controller与@RestController的不同之处?
Spring Boot RestController - PostMapping - 将请求正文作为 InputStream [重复]