Я хочу, чтобы создать собственный бизнес исключение:Пользовательские пружинные Исключения с переменными связывания
public class BusinessException extends RuntimeException {
private static final long serialVersionUID = 1L;
public BusinessException(String msg) {
super(msg);
}
public BusinessException(String msg, Object[] params) {
//Not sure how to pass params to @ExceptionHandler
super(msg);
}
}
и использовать его в моей Spring MVC контроллер отдыха:
@RequestMapping(value = "/{code}", method = RequestMethod.GET)
public @ResponseBody
String getState(@PathVariable String code) throws Exception {
String result;
if (code.equals("KL")) {
result = "Kerala";
} else {
throw new BusinessException("NotAValidStateCode",new Object[]{code});
}
return result;
}
Я обработки все businessException, используя общие обработчик исключений:
@ControllerAdvice
public class RestErrorHandler {
private static final Logger LOGGER = LoggerFactory
.getLogger(RestErrorHandler.class);
@Autowired
private MessageSource messageSource;
@ExceptionHandler(BusinessException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
public String handleException(
Exception ex) {
Object[] args=null; // Not sure how do I get the args from custom BusinessException
String message = messageSource.getMessage(ex.getLocalizedMessage(),
args, LocaleContextHolder.getLocale());
LOGGER.debug("Inside Handle Exception:" + message);
return message;
}
}
Теперь моя проблема в том, что я хочу прочитать текст сообщения из сообщения s, где некоторые из ключей ожидают переменные связывания времени выполнения, например.
NotAValidStateCode= Not a valid state code ({0})
Я не уверен, как передать эти аргументы для обработки метода Exception RestErrorHandler.