我有一个请求映射 -
@RequestMapping("/fetchErrorMessages")
public @ResponseBody int fetchErrorMessages(@RequestParam("startTime") String startTime,@RequestParam("endTime") String endTime) throws Exception
{
if(SanityChecker.checkDateSanity(startTime)&&SanityChecker.checkDateSanity(endTime))
{
return 0;
}
else
{
throw new NotFoundException("Datetime is invalid");
}
}
如果 startTime 和 endTime 无效,我想抛出 500 错误但返回 JSON 中的异常字符串。但是,我得到一个 HTML 页面而不是说
白标错误页面
此应用程序没有针对 /error 的显式映射,因此您将其视为后备。
2017 年 12 月 20 日星期三 10:49:37 IST
出现意外错误(类型=内部服务器错误,状态=500)。
日期时间无效
我反而想用 JSON 返回 500
{"error":"Date time format is invalid"}
我该怎么做?
原文由 Prateek Narendra 发布,翻译遵循 CC BY-SA 4.0 许可协议
假设您有一个自定义异常类
NotFoundException
及其实现如下所示:现在你想从控制器中抛出一些异常。如果你抛出一个异常,那么你必须从一个标准的错误处理程序类中捕获它,例如在春天他们提供
@ControllerAdvice
注释来申请创建一个类标准错误处理程序。当它应用于一个类时,这个 spring 组件(我的意思是你注释的类)可以捕获从控制器抛出的任何异常。但是我们需要用适当的方法映射异常类。所以我们用你的异常定义了一个方法NotFoundException
处理程序如下所示。您想将 http 状态发送到内部服务器 error(500) ,所以这里我们使用了
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
。由于您使用的是 Spring-boot,因此除了简单的注释@ResponseBody
可以自动为您完成之外,您不需要制作 json 字符串。