Java 代码:
@GET
@Path("/stop/{id}")
public void stop(
@PathParam("id") String id,
@Context HttpServletRequest request,
@Context HttpServletResponse response) throws ServletException,
IOException
{
server.stop(id);
}
Java 警告被抛出到控制台:
警告:HTTP GET 方法,public void com.myPackage.stop(java.lang.String,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) 抛出 javax.servlet.ServletException, java.io.IOException,必须返回非空类型。
最佳答案
你真的不应该使用 GET 操作。
我会使用 POST 操作并返回 201 Created,其中包含指向描述系统新状态的资源的链接。
例如,我会重定向到关闭状态资源:
POST /stop/123
...
201 CREATED
Location:
http://acme.com/shutdownstatus/123
客户端可以轮询资源来检查状态
GET /shutdownstatus/123
...
<shutdown xmlns="http://schemas.serverapp.com/shutdown">
<status>pending</status>
<message>Looks good so far</message>
</shutdown>
这个新的 GET 操作将始终返回该 ID 的服务器状态。这样你就知道它是否正确关闭了。如果服务器关闭需要很长时间,客户端可以轮询该资源以检查不同的关闭状态,直到它完成。这样您就可以快速从原始服务器关闭请求返回。
如果在您的流程中抛出异常,我不会将其返回给客户端,我会在服务器状态资源中获得异常状态。当我可以将其表示为资源时,我总是避免让客户端处理异常情况。这使您可以自由更改资源,例如在更改或修复导致异常的方法时,无需更改外部 API。
关于java - 如何在 Restful Java 服务中满足无效返回警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6536753/