Как добавить ошибки в службу сервиса 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. Этот объект содержит поле для кода состояния, сообщения о статусе, даты и времени. Возможно, вам не нужна дата и время, но я считаю это полезным, когда кто-то отправляет мне ошибку, которую они видели, потому что тогда легко отслеживать, где именно это происходило в наших журналах сервера.