如何在restful java服务中满足void返回警告

时间:2011-06-30 14:56:26

标签: java warnings resteasy

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,必须返回一个非void类型。

4 个答案:

答案 0 :(得分:8)

你真的不应该使用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。

答案 1 :(得分:4)

警告是正确的。 GET操作应该是幂等的,因此不应该影响服务器状态。如果你没有返回任何东西,那么该方法无法做任何有用的事情。您应该将其更改为POST或其他适当的HTTP操作。

答案 2 :(得分:-2)

网址必须如下。 {servername}:{port} / {applicationname} / {standardname} / {your service name} / {your operation name}

ex:http://localhost:8080/restful/jersy/user/service/getUserDets

restful - applicationname
jersy - standardname {optional}
用户/服务 - 服务名称
getuserdets - 操作名称

答案 3 :(得分:-4)

尝试将其定义为* V * oid并返回null。

  @GET
  @Path("/stop/{id}")
  public void stop(
  @PathParam("id") String id,
  @Context HttpServletRequest request,
  @Context HttpServletResponse response) throws ServletException,
  IOException
  {
    server.stop(id);
    return null;
  }