Как добавить ошибки в службу сервиса Spring MVC REST?
Как я могу изменить/обновить следующий вызов REST из Spring MVC, чтобы вернуть ошибку, если пользователь не вводил два имени, которые я кодировал.. что-то вроде NOT FOUND?
@RequestMapping(value = "/{name}", method = RequestMethod.GET)
@ResponseBody
public User getName(@PathVariable String name, ModelMap model)
{
logger.debug("I am in the controller and got user name: " + name);
/*
Simulate a successful lookup for 2 users, this is where your real lookup code would go
*/
if ("name2".equals(name))
{
return new User("real name 2", name);
}
if ("name1".equals(name))
{
return new User("real name 1", name);
}
return null;
}
Ответы
Ответ 1
Определите новый класс исключений, например. ResourceNotFoundException
и вытащите экземпляр этого из вашего метода аннотированного контроллера getName
.
Затем также определите метод обработчика аннотированных исключений в вашем классе Controller для обработки этого исключения и верните код состояния 404 Not Found, потенциально зарегистрировав его.
@ExceptionHandler(ResourceNotFoundException.class)
@ResponseStatus(value = HttpStatus.NOT_FOUND)
public void handleResourceNotFoundException(ResourceNotFoundException ex)
{
LOG.warn("user requested a resource which didn't exist", ex);
}
Или даже возвращая некоторое сообщение об ошибке, используя аннотацию @ResponseBody:
@ExceptionHandler(ResourceNotFoundException.class)
@ResponseStatus(value = HttpStatus.NOT_FOUND)
@ResponseBody
public String handleResourceNotFoundException(ResourceNotFoundException ex)
{
return ex.getMessage();
}
Ответ 2
Вы можете создать объект специально для возврата ответов об ошибках. Таким образом, вы можете сказать все, что захотите. Например:
@ExceptionHandler(HttpMessageNotReadableException.class)
public ResponseEntity<ResponseStatus> handleHttpMessageNotReadableException(HttpMessageNotReadableException ex){
ResponseStatus responseStatus = new ResponseStatus("400", "Bad Request. " + ex);
responseStatus.setResponseStatusTime(timestampService.createTimestamp());
HttpStatus status = HttpStatus.BAD_REQUEST;
ResponseEntity<ResponseStatus> response = new ResponseEntity<ResponseStatus>(responseStatus, status);
return response;
}
В этом примере вы можете увидеть, что есть объект ResponseStatus. Этот объект содержит поле для кода состояния, сообщения о статусе, даты и времени. Возможно, вам не нужна дата и время, но я считаю это полезным, когда кто-то отправляет мне ошибку, которую они видели, потому что тогда легко отслеживать, где именно это происходило в наших журналах сервера.