如何在Spring中返回自定义内容类型的错误消息?

时间:2017-11-15 11:04:02

标签: java json spring spring-mvc

我有一些@RestControllerSpring。我使用查询参数?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?

1 个答案:

答案 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