REST - 如何处理不必要的请求?

时间:2013-12-13 09:31:49

标签: java spring api rest spring-mvc

我使用Spring 3.2 MVC / Tomcat 7.4 / PostgreSQL编写的简单REST API原型。

现在我在想什么是解决这些问题的最佳方法:

  1. 有人向不存在的资源发出请求
  2. 有人向资源发出请求,但使用的是不受支持的HTTP方法
  3. 有人向资源发出请求,但提供的数据不正确或不完整
  4. 问题3我可以通过检查数据和响应正确的HTTP头(HTTP 400或HTTP 404因为某些输入数据丢失而找不到数据)来解决,但我不知道如何解决(在Spring中)问题1和2.

    处理此类异常的最佳做法是什么?

3 个答案:

答案 0 :(得分:1)

对于问题1 ,只返回404错误。

创建404例外:

@ResponseStatus(value = HttpStatus.NOT_FOUND)
public class ResourceNotFoundException extends RuntimeException {

}

现在从任何处理程序抛出它,客户端将收到404错误。

对于问题2 ,如果您正确设置过滤器,或者如果没有生成并发送405不允许的代码,框架将自动生成并返回错误页面。

对于问题3 以与问题1相同的方式返回400 Bad Syntax错误 - 或者生成更复杂的错误返回,详细说明问题。

答案 1 :(得分:1)

  1. 返回404(未找到)
  2. 返回405(方法不允许)
  3. 返回400(错误请求)
  4. 建议,当有人请求不存在的URL路径时返回的404的正文/标题应该与资源不存在时不同。这将允许您的客户确定他们是否正在调用错误的URL或资源是否存在。

答案 2 :(得分:0)

  • 对于案例#1,它是明确的404 Not Found。
  • 对于案例#2,它是405 Method Not Allowed。
  • 对于案例#3,这是一个400 Bad Request。

有关这些案例的说明及其背后的原因,请参阅http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html