如何配置单个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个休息控制器?
答案 0 :(得分:1)
@ExceptionHandler
的优势在于,您可以在一个地方处理多个地点时遇到相同的例外情况。您正在寻找相反的方法:在多个地方/方式处理异常。
您无法在单个班级和注释中实现这一目标,但您可以使用try/catch
和method1()
中的正常method2()
来实现此目标。