Я ищу чистый способ вернуть настроенные 404 ошибки в Spring 4, если запрошенный ресурс не найден. Запросы к различным типам доменов должны приводить к разным страницам ошибок.
Вот какой код, чтобы показать мое намерение (Meter - класс домена):
@RequestMapping(value = "/{number}", method = RequestMethod.GET)
public String getMeterDetails(@PathVariable("number") final Long number, final Model model) {
final Meter result = meterService.findOne(number);
if (result == null) {
// here some code to return an errorpage
}
model.addAttribute("meter", result);
return "meters/details";
}
Я представляю несколько способов решения проблемы. Сначала появилась возможность создать RuntimeException
like
@ResponseStatus(HttpStatus.NOT_FOUND)
public class MeterNotFoundExcption extends RuntimeException { }
а затем используйте обработчик исключений для создания настраиваемой страницы ошибок (возможно, содержащая ссылку на список счетчиков или что-то подходящее).
Но мне не нравится загрязнение моего приложения многими небольшими исключениями.
Другая возможность - использовать HttpServletResponse
и установить код состояния вручную:
@RequestMapping(value = "/{number}", method = RequestMethod.GET)
public String getMeterDetails(@PathVariable("number") final Long number, final Model model,
final HttpServletResponse response) {
final Meter meter = meterService.findOne(number);
if (meter == null) {
response.setStatus(HttpStatus.NOT_FOUND.value());
return "meters/notfound";
}
model.addAttribute("meter", meter);
return "meters/details";
}
Но с этим решением я должен дублировать первые 5 строк для многих методов контроллера (например, редактировать, удалять).
Есть ли элегантный способ предотвратить дублирование этих строк много раз?