我们可以使用HTTP代码422(不可处理的实体)进行Get操作吗?

时间:2019-07-09 04:20:17

标签: java spring rest spring-boot http

团队-我们在代码中使用422 HTTP Status Code for validations进行HTTP GET操作。但是不确定,是否可以使用get操作。 422 unprocessable实体听起来更像是请求正文验证-请帮助

谢谢

4 个答案:

答案 0 :(得分:1)

通常GET请求没有有效负载。我们使用GET从Server / DB检索数据,这些数据在创建或插入时已经过验证。这意味着我们在检索时无需验证数据。

如果我们有有效载荷,则应使用POST。我们可以根据需要将422或400与POST一起使用。

获取

  

GET方法意味着检索任何信息(以   实体)由Request-URI标识。如果请求URI指向   数据产生过程,应是产生的数据   作为响应中的实体返回,而不是   流程,除非该文本恰好是流程的输出。

POST

  

POST方法用于请求源服务器接受   请求中包含的实体作为资源的新下属   在请求行中由Request-URI标识。 POST旨在   允许采用统一的方法来覆盖以下功能:

  - Annotation of existing resources;
  - Posting a message to a bulletin board, newsgroup, mailing list,
    or similar group of articles;
  - Providing a block of data, such as the result of submitting a
    form, to a data-handling process;
  - Extending a database through an append operation.

400

  

400(错误请求)状态代码表示服务器无法执行以下操作:   由于某些原因而无法处理请求
  是客户端错误(例如,格式错误的请求语法,无效的请求
  邮件框架或欺骗性请求路由)。

422

  

422(不可处理实体)状态代码表示服务器
  了解请求实体的内容类型(因此,
  415(不受支持的媒体类型)状态码不正确),并且
  请求实体的语法正确(因此为400(错误请求)
  状态代码不正确),但无法处理其中的内容   说明。例如,如果XML
,则可能发生此错误情况。   请求正文包含格式正确(即语法正确)的内容,但
  语义错误的XML指令。在RFC 723x中找不到422

Source RFC 2616 Source RFC 723x

答案 1 :(得分:0)

  

422“无法处理的实体”更多地涉及语义错误,URI为   不是请求实体的一部分,因此422不适用。

答案 2 :(得分:0)

422的说明说

422(不可处理实体)状态代码表示服务器理解请求实体的内容类型(因此415(不支持的媒体类型)状态代码不合适),并且请求实体的语法正确(因此为400 (错误请求)状态代码不合适),但无法处理其中包含的说明。

相反,我认为这里更适合400种代码。

因此,可能有人争辩说它不适合语义错误。但是没有更多了。自2014年6月起,相关标准RFC 7231(取代了之前的RFC2616)在以下方面更广泛地使用了400(错误请求): 由于某些原因导致客户端错误,服务器无法或将不会处理请求

答案 3 :(得分:-2)

422无法处理的实体可以用于任何类型的请求。它不是特定于GET或POST或DDELETE。如果必须验证可以接受为请求的任何数据,并且必须验证任何前提条件,则可以引发HTTP 422。

例如。 GET调用中存在路径参数,即您所经过的年龄,在语法上是正确的,例如16,但是对于18岁以上的您的业务逻辑,因此在此处抛出400是不正确的。

参考:https://www.restapitutorial.com/httpstatuscodes.html