我有一些@RestController
与Spring
。我使用查询参数?format=
来控制返回的内容类型(这是一个弹簧内置功能)。
问题:如果content-type不是json / xml,但是例如text或csv
,spring会尝试将返回的错误响应转换为csv
。这当然失败了,因此我没有回复AuthenticationException
,而是HttpMediaTypeNotAcceptableException
。
格式= JSON:
{
"timestamp": "2017-11-15T11:00:07.079+0000",
"status": 401,
"error": "Unauthorized",
"message": "Bad credentials",
"path": "..."
}
?格式= XML:
<Map>
<timestamp>2017-11-15T11:00:21.590+0000</timestamp>
<status>401</status>
<error>Unauthorized</error>
<message>Bad credentials</message>
<path>...</path>
</Map>
?format = csv :(我提供了一些直接创建文本csv文件的端点):
Response could not be created: org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation
问题:如何告诉spring格式化任何错误响应,例如纯文本,如果格式参数不是json / xml?
答案 0 :(得分:0)
您可以使用spring controller advice注释和异常处理程序。从而捕捉各种错误并以一般方式作出回应。
@ControllerAdvice
class YourControllerAdviceClass {
@ResponseStatus(value= HttpStatus.NOT_FOUND, reason="Exception occured")
@ExceptionHandler({ Exception.class })
public YourReturnType handleAllException() {
return YourReturnType;
}
}
有关详细信息,您可以阅读本文,为您提供有关错误处理和响应可能性的更多选项。
http://www.baeldung.com/exception-handling-for-rest-with-spring