Spring rest controller异常处理

时间:2016-09-07 17:08:12

标签: java spring rest spring-mvc exception-handling

如何配置单个rest控制器来处理返回不同对象类型的不同API调用的异常?

@RequestMapping(method = RequestMethod.GET)
public ResponseEntity<Foo> method1() 

@RequestMapping(method = RequestMethod.GET)
public ResponseEntity<Bar> method2()

假设method1()和method2()抛出MyException的一个实例,那么我需要以下列方式处理它们:

@ExceptionHandler(MyException.class)
@ResponseBody
public ResponseEntity<Foo> handleFoo(Exception ex) {
    //Return foo with error description
    Foo f = new Foo();
    f.setError(ex.getMessage());
    //Set f to response entity
    return new ResponseEntity<>(); 
}

@ExceptionHandler(MyException.class)
@ResponseBody
public ResponseEntity<Bar> handleBar(Exception ex) {
     //Return bar with error description
    Bar b = new Bar();
    b.setError(ex.getMessage());
    //Set b to response entity
    return new ResponseEntity<>(); 
}

当method1()抛出MyException的一个实例时,应该调用handleFoo()。 对于method2(),应该调用handleBar()。

这可能在一个Rest控制器中,还是每个方法需要2个休息控制器?

1 个答案:

答案 0 :(得分:1)

@ExceptionHandler的优势在于,您可以在一个地方处理多个地点时遇到相同的例外情况。您正在寻找相反的方法:在多个地方/方式处理异常。

您无法在单个班级和注释中实现这一目标,但您可以使用try/catchmethod1()中的正常method2()来实现此目标。