管理例外

时间:2017-05-26 14:10:58

标签: java spring exception 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
        }
    }

你有什么想法吗?

3 个答案:

答案 0 :(得分:1)

  

return(Person)“{\”ERROR \“:\”+ e.getMessage()+ \“}”; //这不起作用

这不起作用,因为您尝试将String对象转换为Person类型。它甚至不应该编译我相信。

有两种解决方法:

  • 返回Person对象,因为您正在使用@ResponseBody,它将被序列化为JSON
  • 如果您想手动返回JSON响应,则应返回String而不是Person,并正确设置Content-Type标头(使用@RequestMapping(produces = "application/json"或{ {1}})

我还建议阅读Exception Handling in Spring MVC文章,找到更多处理Spring MVC中除外的方法。

更新:

在这种简单的情况下,您可以将response.setContentType("application/json")与单个字段一起使用:

Map

答案 1 :(得分:0)

使用ControllerAdvice,我解释一下:

@ControllerAdvice
public class MyExceptionsHandlerController{

  @ExceptionHandler(Exception.class)
  @ResponseBody Person handleException(){
   //do what you want 
  }
}

请注意,使用Exception过于通用,您应该更多地处理您想要处理的异常类型。

答案 2 :(得分:0)

做这样的事情:

public static class Person{
    //other fields
    public String error = null;

    public String getError() {
        return error;
    }

    public void setError(String error) {
        this.error = error;
    }
}

@RequestMapping(value = "/testRest", method = RequestMethod.GET)
public @ResponseBody Person tst(HttpServletResponse response) throws Exception {
    try {
        return ldapService.getUserByPrimaryKey("tst@ts.com");
    } catch (Exception e) {
        Person person = new Person();
        person.setError("{\"ERROR\": " + e.getMessage() +"}");          
        return person;
    }
}

正弦你不想发回500不要这样做:

response.setStatus(HttpServletResponse.SC_BAD_REQUEST);

此外,您无法将字符串转换为java中的Person类。