ExceptionHandler совместно используется несколькими контроллерами - PullRequest
4 голосов
/ 26 сентября 2011

Можно ли объявить ExceptionHandlers в классе и использовать их в более чем одном контроллере, потому что копирование-вставка обработчиков исключений в каждом контроллере будет избыточным.

-Класс, объявляющий обработчики исключений:

@ExceptionHandler(IdentifiersNotMatchingException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
def @ResponseBody
String handleIdentifiersNotMatchingException(IdentifiersNotMatchingException e) {
    logger.error("Identifiers Not Matching Error", e)
    return "Identifiers Not Matching Error: " + e.message
}

@ExceptionHandler(ResourceNotFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
def @ResponseBody
String handleResourceNotFoundException(ResourceNotFoundException e) {
    logger.error("Resource Not Found Error", e)
    return "Resource Not Found Error: " + e.message
}

-ContactController

@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
@RequestMapping(value = "contact/{publicId}", method = RequestMethod.DELETE)
def @ResponseBody
void deleteContact(@PathVariable("publicId") String publicId) throws ResourceNotFoundException, IdentifiersNotMatchingException {...}

-LendingController

@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
@RequestMapping(value = "lending/{publicId}", method = RequestMethod.PUT)
def @ResponseBody
void updateLending(@PathVariable("publicId") String publicId, InputStream is) throws ResourceNotFoundException {...}

Ответы [ 3 ]

5 голосов
/ 26 сентября 2011

Один из способов сделать это - иметь базовый класс, который расширяют ваши контроллеры (может быть абстрактным).Базовый класс может содержать все «обычные» вещи, включая обработчики исключений, а также загружать общие данные модели, такие как пользовательские данные.

1 голос
/ 26 сентября 2011

Вы можете объявить HandlerExceptionResolver как компонент, который будет использоваться на каждом контроллере.Вы бы просто проверили тип и обработали его как хотите.

0 голосов
/ 04 декабря 2011

Или вы можете создать интерфейс для обработки исключений и внедрить его в ваш класс контроллера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...