我开发了一个应用程序 Spring Boot。我想要管理异常而不是向客户端发送错误 500。
我想做这样的事情:
@RequestMapping(value = "/testRest", method = RequestMethod.GET)
public @ResponseBody Person tst(HttpServletResponse response) {
try {
return ldapService.getUserByPrimaryKey("tst@ts.com");
} catch (Exception e) {
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
return (Person) "{\"ERROR\": \" + e.getMessage() +\"}"; // This not work
}
}
你有什么想法吗?
最佳答案
return (Person) "{\"ERROR\": \" + e.getMessage() +\"}"; // This not work
这不起作用,因为您试图将 String
对象转换为 Person
类型。我相信它甚至不应该编译。
有两种方法可以解决此问题:
- 返回
Person
对象,并且由于您使用的是@ResponseBody
,它将被序列化为 JSON - 如果您想手动返回 JSON 响应,则应返回
String
而不是Person
,并正确设置Content-Type
header (通过使用@RequestMapping(products = "application/json"
或response.setContentType("application/json")
)
我还建议阅读 Exception Handling in Spring MVC文章以查找在 Spring MVC 中处理异常的更多方法。
<小时/>更新:
在这种简单的情况下,您可以使用带有单个字段的Map
:
public @ResponseBody Map<String, String> tst(HttpServletResponse response) {
...
return Collections.singletonMap("ERROR": e.getMessage());
关于java - 管理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44203748/