我有一个spring boot webapp,我在其中定义了REST API。我使用Spring安全性来实现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>
我的Controller中没有任何ExceptionHandler。它默认为json错误。我的库中有jackson和jackson-mapper-asl。
我无法弄清楚是否有某个默认设置需要更改以发送错误为json。
我也尝试禁用ErrorPageFilter,但即使在那之后我得到了HTML响应。
我有什么方法可以获得json响应而不是html?
答案 0 :(得分:0)
Spring使用Accept HTTP request标头协助您进行内容协商。
如果@RestController
发送了html错误页面,则您的客户端可能会要求它。如果要获取json而不是html响应,请确保在请求中发送标头Accept: application/json
。