Quarkus实战:专为Kubernetes而优化的Java解决方案
上QQ阅读APP看书,第一时间看更新

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