提问者:小点点

我如何添加错误到我的spring MVC REST服务?


如果用户没有输入我编码的两个名称,我如何改变/更新以下来自spring MVC的REST调用以返回一个错误…像是找不到的东西?

@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;
    }

共2个答案

匿名用户

定义一个新的异常类,例如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();
}

匿名用户

您可以创建一个专门用于返回错误响应的对象。那样,你想说什么就说什么。例如:

@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对象。此对象包含状态代码、状态消息、日期和时间的字段。您可能不需要日期和时间,但我发现当某人发送给我一个他们看到的错误时,它很有用,因为这样就很容易跟踪它在我们的服务器日志中发生的确切位置。