
3.3 使用HTTP响应状态码
问题
如何使用HTTP响应状态码来正确反映请求的结果?
解决方案
JAX-RS规范使用javax.ws.rs.core.Response接口来返回正确的HTTP响应状态码,并设置任何其他所需的信息,如响应内容、cookie或header。
❶将响应状态码设置为201,以Location头作为URI进行创建
❷设置资源类的路径
❸在Location头中设置开发者ID
❹将创建的开发者设置为响应内容
❺构建Response对象
如果要从端点返回JSON,需要在项目中使用quarkus-resteasy-jsonb或quarkus-resteasy-jackson扩展。
打开一个新的终端窗口,启动Quarkus应用程序,并向GET方法发送一个请求:
请注意,Location头包含一个有效的URI来访问创建的资源。
讨论
当定义一个RESTful Web API时,遵循一些约定真的很重要,这些约定是由使用的底层技术提供的。对于RESTful Web服务来说,它是HTTP层。
定义API的另一个关键是使用正确的响应状态码,这些状态码被发回给客户端,以表明请求是否已经完成。有5类状态码:
·信息响应(100~199)
·成功的答复(200~299)
·重定向(300~399)
·客户端错误(400~499)
·服务器错误(500~599)
默认情况下,Quarkus试图用正确的HTTP状态码提供开箱即用的响应。例如,它在违反约束的情况下提供400 Bad Request,在服务器异常的情况下提供500 Internal Server Error。但有一个用例是它默认不覆盖的:创建一个资源,在这个资源中,HTTP 201 Created状态响应码应该被发回给客户端,在消息的主体中包含新资源,在Location头中设置新资源的URL。
另见
完整的HTTP响应状态码汇总在以下网站。
·MDN Web文档:HTTP响应状态代码(https://oreil.ly/Gq02d)