java - 管理异常

标签 java spring exception spring-boot

我开发了一个应用程序 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/

相关文章:

java - 如何通过 Spring XD Sink 处理一些数据并将其存储到多个表中

javascript - 捕获未引发的异常

c++ - 如何捕获 C++ 异常?

java - 如何在 th :if tag using thymeleaf 中有多个条件

python - 异常被执行两次并被不同的 except block 捕获

java - 将数组列表转换为 html 表

java - javax.swing.JFrame不包含setDefaultCLoseOperation

java - 字节数组未正确打印到文件

java - 有什么方法可以在 Eclipse 中获得类似 IntelliJ 的自动完成功能?

java - 在 Spring MVC 中线程化 for 循环