Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.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
Java 405在Jersey中使用POST方法时返回错误_Java_Jersey - Fatal编程技术网

Java 405在Jersey中使用POST方法时返回错误

Java 405在Jersey中使用POST方法时返回错误,java,jersey,Java,Jersey,我正在使用Jersey,对GET和PUT调用没有问题,但由于某种原因POST拒绝工作;我一直收到405的退票 我在我的方法上尝试了多次签名排列,我开始怀疑我是否还遗漏了什么 下面是一个不起作用的例子: 服务器端: @Path("/tmm") public class TmmRes { @POST @Path("/mypost") @Consumes(MediaType.APPLICATION_JSON) public Response postTest(String input) {

我正在使用Jersey,对
GET
PUT
调用没有问题,但由于某种原因
POST
拒绝工作;我一直收到405的退票

我在我的方法上尝试了多次签名排列,我开始怀疑我是否还遗漏了什么

下面是一个不起作用的例子:

服务器端:

@Path("/tmm")

public class TmmRes  {

@POST
@Path("/mypost")
@Consumes(MediaType.APPLICATION_JSON)
public Response postTest(String input) {
    System.out.println("Made it to POST: "+input);
    return Response.status(201).entity(input).build(); 
}
}

客户端:

Client client = Client.create();
WebResource webResource = client.resource("http://localhost:8888/api/v1").path("tmm").path("mypost");
String input = "{\"address\":\"myaddress\",\"user\":4}";
ClientResponse response = webResource.type(MediaType.APPLICATION_JSON).post(ClientResponse.class, input);
我意识到,使用
JSON
我应该有一个输入绑定到的对象,但我已经降低了复杂性,只需让它工作即可


有人有什么见解吗?顺便说一句,我正在使用Tomcat(6.0.43)

我认为您必须创建如下POJO:

public class User {

private String address;
private Integer user;

// getters and setters

}
然后改变

@POST
@Path("/mypost")
@Consumes(MediaType.APPLICATION_JSON)
public Response postTest(String input) {
    System.out.println("Made it to POST: "+input);
    return Response.status(201).entity(input).build(); 
}
致:


好的,在一个朋友的帮助下,我终于找到了答案。我的URL被重定向了。这让我的帖子变成了一个小问题。谢谢大家的帮助。你的确认消除了可能性,帮助我找到答案。

我用IntelliJ解决了这个问题


进入菜单:BUILD->BUILD ARTIFACTS->BUILD或REBUILD,就这样。

您是否尝试过使用POSTMAN(chrome应用程序,而不是chrome浏览器扩展)执行相同的请求?因此,您可以看到真正的HTTP请求、内容类型等。似乎内容类型text/json没有正确执行。是的,我尝试过POSTMAN,但结果相同。我想知道POST是否有一些独特之处,需要在服务器端进行一些额外的设置。我还能够让DELETE工作…这段代码在我的设置下工作,要么你丢失了路径,要么你在tomcat或jersey版本上有问题。你有没有试着把所有的帖子都改成这个特定的代码,这是有效的?或者你有其他用PUT注释的有效方法吗?谢谢你的尝试。。。是的,我试着将POST改为PUT,并在客户端改为“PUT”,效果很好。我的设置不喜欢POST中的某些内容。你的web.xml有什么特别的地方吗?是的,不幸的是,它给了我同样的问题。我想知道是否有一些安全问题我遗漏了(虽然放,删除工作)。我不认为这是任何安全问题。你能发布从邮递员那里得到的完整请求吗?这是我要发送的:post/api/v1/tmm/mypost HTTP/1.1主机:localhost:8888内容类型:application/json缓存控制:无缓存邮递员令牌:8463180a-34b8-fdad-5cd6-adbeb52e9d90{“用户”:“joeschmoe”,“address”:“here”}我注意到传入类(TmmRes)的请求对象的httpMethod值为“GET”。Jersey似乎正在将我的POST请求更改为GET请求。以前有人见过这种行为吗?
@POST
@Path("/mypost")
@Consumes(MediaType.APPLICATION_JSON)
public Response postTest(User input) {
    System.out.println("Made it to POST: "+input);
    return Response.status(201).entity(input).build(); 
}