我开发了一个应用程序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
}
}你有什么想法吗?
发布于 2017-05-26 22:23:29
return (人)“{ \”错误\“:\”+ e.getMessage() +\"}";//这不起作用
这不起作用,因为您试图将String对象强制转换为Person类型。我认为它甚至不应该编译。
有两种方法可以解决这个问题:
Person对象,由于您使用的是@ResponseBody,因此它将被序列化为JSON String而不是Person,并正确设置Content-Type标头(通过使用<代码>d13或JSON我还建议阅读Exception Handling in Spring MVC的文章,找到更多在Spring MVC中处理异常的方法。
更新:
在这种简单的情况下,您可以使用具有单个字段的Map:
public @ResponseBody Map<String, String> tst(HttpServletResponse response) {
...
return Collections.singletonMap("ERROR": e.getMessage());发布于 2017-05-26 22:18:54
使用ControllerAdvice,我解释:
@ControllerAdvice
public class MyExceptionsHandlerController{
@ExceptionHandler(Exception.class)
@ResponseBody Person handleException(){
//do what you want
}
}请注意,使用Exception太过泛型,您应该更细粒度地确定要处理的异常类型。
发布于 2017-05-26 22:21:57
这样做:
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类。
https://stackoverflow.com/questions/44203748
复制相似问题