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类型。
答案 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;
}