У меня есть следующий RestController
(Spring boot 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
??
используйте @ControllerAdvice
и @ExceptionHandler
. ссылка
Вы можете использовать @ControllerAdvice
и @ExceptionHandler
.
@ControllerAdvice
: по умолчанию @ControllerAdvice
будет применяться ко всем классам, использующим аннотацию @Controller. Если вы хотите, чтобы это было более конкретным, вы можете сделать это, написав некоторые свойства, например @ControllerAdvice("my.org.package")
@ExceptionHandler
: Использование @ControllerAdvice
вместе с @ExceptionHandler
обеспечивает глобальную обработку ошибок. Вы можете написать аннотации @ExceptionHandler(IllegalArgumentException.class)
, которые будут обрабатывать все исключения для IllegalArgumentException
.
Для получения дополнительной информации вы можете обратиться к этому: