我有以下RestController
(春季启动2.0.4
),它具有几种遵循execute
相同结构的方法。它们可能指向不同的url
或用@GetMapping
而不是@PostMapping
进行注释:
@RestController
public class Controller {
private final DataAccessLayer dal;
@PostMapping("myUrl_1") execute(@RequestBody String param) {
try {
...
} catch (CustomException e) {
...
} catch (CustomException_2 e_2) {
...
} finally {
...
}
}
...
}
唯一的区别是param
用法和dal
用法。
我的问题是,如何避免在catch
和finally
子句中重复代码?
答案 0 :(得分:3)
您可以使用@ControllerAdvice
和@ExceptionHandler
。
@ControllerAdvice
:默认情况下,@ControllerAdvice
将应用于所有使用@Controller注释的类。如果您想更具体一点,可以通过编写一些属性,例如@ControllerAdvice("my.org.package")
@ExceptionHandler
:与@ControllerAdvice
一起使用@ExceptionHandler
提供了全局错误处理。您可以编写注释@ExceptionHandler(IllegalArgumentException.class)
来处理IllegalArgumentException
的所有异常。
答案 1 :(得分:0)
使用@ControllerAdvice
和@ExceptionHandler
。 link