Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在restful java服务中满足void return警告_Java_Warnings_Resteasy - Fatal编程技术网

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

如何在restful java服务中满足void return警告,java,warnings,resteasy,Java,Warnings,Resteasy,Java代码: @GET @Path("/stop/{id}") public void stop( @PathParam("id") String id, @Context HttpServletRequest request, @Context HttpServletResponse response) throws ServletException, IOException {

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类型。尝试将其定义为*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;
  }

警告是正确的。GET操作应该是幂等的,所以不应该影响服务器状态。如果没有返回任何内容,则该方法将无法执行任何有用的操作。您应该将其更改为POST或其他适当的HTTP操作。

您确实不应该使用GET操作

我将使用POST操作并返回创建的201,其中包含一个到资源的链接,该资源描述了系统的新状态

例如,我将重定向到关机状态资源:

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/shutdownstatus/123
...
悬而未决的
到目前为止看起来不错
这个新的GET操作将始终返回该id的服务器状态。这样您就可以知道它是否正确关闭。如果服务器关闭需要很长时间,客户端可以轮询该资源以检查不同的关闭状态,直到关闭完成。通过这种方式,您可以快速从原始服务器关闭请求返回

如果在您的进程中引发了异常,我不会将其返回给客户端,我会在服务器状态资源中具有异常的状态。当我可以将客户机表示为资源时,我总是避免让客户机处理异常情况。这允许您自由地更改资源,例如更改或修复导致异常的方法时,而无需更改外部API。

url必须如下所示。 {servername}:{port}/{applicationname}/{standardname}/{your service name}/{your operation name}

例:

restful-applicationname
jersy-standardname{可选}
用户/服务-服务名称

getuserdets-operation name

是否
server.stop(id)
返回某些内容?否。只是执行一个进行内部计算的方法调用。您为什么希望stop成为GET操作?上面的这个家伙通过单击按钮被击中@迈克尔·克鲁塞尔。更好的方法是什么?一篇帖子似乎不合适,但我又不是一个restful专家,帖子比GET要好,如果它来自web表单,那么我相信POST和GET是唯一的选择。提供的答案给出了一个很好的解释。看起来像一个黑客工作。这是“解决方案”还是“A”解决方案?这个问题我已经争论了一段时间了。谢谢你的回复,阿列克谢