我正在为我的休息服务器使用jersey,而当我尝试将POST请求转发给相对GET资源时,我收到了HTTP 405错误。
@Path("/")
public class MyResource {
@POST
@Path("/{method}")
@Produces(MediaType.APPLICATION_JSON)
public String postRequest(@PathParam("method") String method, @Context UriInfo uriInfo, String body) throws IOException {
JsonParser parser = new JsonParser();
JsonObject root = parser.parse(body).getAsJsonObject();
JsonObject params = root;
if (root.has("method")) {
method = root.get("method").getAsString();
params = root.getAsJsonObject("params");
}
UriBuilder forwardUri = uriInfo.getBaseUriBuilder().path(method);
for (Map.Entry<String, JsonElement> kv : params.entrySet()) {
forwardUri.queryParam(kv.getKey(), kv.getValue().getAsString());
}
return new SimpleHttpClient().get(forwardUri.toString());
}
@GET
@Path("/mytest")
@Produces(MediaType.APPLICATION_JSON)
public String getTest(@QueryParam("name") String name) {
return name;
}
}
curl -X POST -d {“method”:“mytest”,“params”:{“name”:“jack”}} localhost / anythingbutmytest
curl -X GET localhost / mytest?name = jack
这两个卷曲上面工作正常。但是当我尝试这样请求时,我得到405错误:
curl -X POST -d {“method”:“mytest”,“params”:{“name”:“jack”}} localhost / mytest
javax.ws.rs.NotAllowedException: HTTP 405 Method Not Allowed
at org.glassfish.jersey.server.internal.routing.MethodSelectingRouter.getMethodRouter(MethodSelectingRouter.java:466)
at org.glassfish.jersey.server.internal.routing.MethodSelectingRouter.access$000(MethodSelectingRouter.java:94)
......
我该怎么办?
-------------------------------------更新--------- ----------------------------
curl -X POST -d {“method”:“mytest”,“params”:{“name”:“jack”}} localhost / mytest
当我添加如下的帖子方法时,这个卷曲工作正常。 但是我会为每个GET方法编写一个相同的POST方法,还有其他解决方案吗?
@POST
@Path("/mytest")
@Produces(MediaType.APPLICATION_JSON)
public String postMyTest(@Context UriInfo uriInfo, String body) throws Exception {
return postRequest(uriInfo.getPath(), uriInfo, body);
}
此外,还有其他方法可以将POST请求重新路由到同一个类中的方法而不构建新的HTTP请求吗?
答案 0 :(得分:0)
你应该
@POST
@Path("/mytest")
而不是&#34; getTest&#34; method.Reason在下面。
命令
curl -X POST -d {"method":"mytest","params":{"name":"jack"}} localhost/anythingbutmytest
将接受
@Path("/{method}") .
但是
curl -X POST -d {"method":"mytest","params":{"name":"jack"}} localhost/mytest
由于,不会接受
@GET
@Path("/mytest")
POST与GET不匹配。