Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.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 带有POST请求的简单Restful服务导致HTTP 405错误:不允许使用方法_Java_Rest - Fatal编程技术网

Java 带有POST请求的简单Restful服务导致HTTP 405错误:不允许使用方法

Java 带有POST请求的简单Restful服务导致HTTP 405错误:不允许使用方法,java,rest,Java,Rest,我刚开始休息工作。下面是我完整的源代码。我尝试过JSON类型,甚至纯文本(text/plain)类型。还在 不允许使用HTTP 405方法 球衣客户: package com.post; import javax.ws.rs.core.MediaType; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.ClientResponse; import com.sun.jersey.api.cli

我刚开始休息工作。下面是我完整的源代码。我尝试过JSON类型,甚至纯文本(text/plain)类型。还在

不允许使用HTTP 405方法

球衣客户:

package com.post;

import javax.ws.rs.core.MediaType;

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;

public class JerseyClientPost {

    public static void main(String[] args) {
        try{
        // TODO Auto-generated method stub
  Client client = Client.create();
  WebResource r = client.resource("http://localhost:8080/PostExample/rest/priya/metallica/post");
  String input = "{\"singer\":\"Metallica\",\"title\":\"Fade To Black\"}";
  ClientResponse resp = r.accept(MediaType.TEXT_PLAIN).post(ClientResponse.class, input);
  if (resp.getStatus() != 201) {
        throw new RuntimeException("Failed : HTTP error code : "
             + resp.getStatus());
    }

    System.out.println("Output from Server .... \n");
    String output = resp.getEntity(String.class);
    System.out.println(output);

} catch (Exception e) {

    e.printStackTrace();

}
}


    }
package com.post;

import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

@Path("/priya/metallica")
public class JSONService {

    @POST
    @Path("/post")
    @Consumes(MediaType.TEXT_PLAIN)
    public Response createTrackInJSON(Track track) {

        String result = "Track saved : " + track;
        return Response.status(201).entity(result).build();

    }
}
package com.post;

public class Track {

    private String singer;
    private String title;

    public String getSinger(){
        return singer;
    }
    public void setSinger(String singer){
        this.singer=singer;
    }
    public String getTitle(){
        return title;

    }
    public void setTitle(String title){
        this.title =title;
    }

}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>PostExample</display-name>
 <servlet>
 <servlet-name>jersey-serlvet</servlet-name>
 <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
 <init-param>
 <param-name>com.sun.jersey.config.property.packages</param-name>
 <param-value>com.post</param-value>
 </init-param>

 <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
 <servlet-name>jersey-serlvet</servlet-name>
 <url-pattern>/rest/*</url-pattern>
 </servlet-mapping>
</web-app>
资源:

package com.post;

import javax.ws.rs.core.MediaType;

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;

public class JerseyClientPost {

    public static void main(String[] args) {
        try{
        // TODO Auto-generated method stub
  Client client = Client.create();
  WebResource r = client.resource("http://localhost:8080/PostExample/rest/priya/metallica/post");
  String input = "{\"singer\":\"Metallica\",\"title\":\"Fade To Black\"}";
  ClientResponse resp = r.accept(MediaType.TEXT_PLAIN).post(ClientResponse.class, input);
  if (resp.getStatus() != 201) {
        throw new RuntimeException("Failed : HTTP error code : "
             + resp.getStatus());
    }

    System.out.println("Output from Server .... \n");
    String output = resp.getEntity(String.class);
    System.out.println(output);

} catch (Exception e) {

    e.printStackTrace();

}
}


    }
package com.post;

import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

@Path("/priya/metallica")
public class JSONService {

    @POST
    @Path("/post")
    @Consumes(MediaType.TEXT_PLAIN)
    public Response createTrackInJSON(Track track) {

        String result = "Track saved : " + track;
        return Response.status(201).entity(result).build();

    }
}
package com.post;

public class Track {

    private String singer;
    private String title;

    public String getSinger(){
        return singer;
    }
    public void setSinger(String singer){
        this.singer=singer;
    }
    public String getTitle(){
        return title;

    }
    public void setTitle(String title){
        this.title =title;
    }

}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>PostExample</display-name>
 <servlet>
 <servlet-name>jersey-serlvet</servlet-name>
 <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
 <init-param>
 <param-name>com.sun.jersey.config.property.packages</param-name>
 <param-value>com.post</param-value>
 </init-param>

 <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
 <servlet-name>jersey-serlvet</servlet-name>
 <url-pattern>/rest/*</url-pattern>
 </servlet-mapping>
</web-app>
POJO类:

package com.post;

import javax.ws.rs.core.MediaType;

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;

public class JerseyClientPost {

    public static void main(String[] args) {
        try{
        // TODO Auto-generated method stub
  Client client = Client.create();
  WebResource r = client.resource("http://localhost:8080/PostExample/rest/priya/metallica/post");
  String input = "{\"singer\":\"Metallica\",\"title\":\"Fade To Black\"}";
  ClientResponse resp = r.accept(MediaType.TEXT_PLAIN).post(ClientResponse.class, input);
  if (resp.getStatus() != 201) {
        throw new RuntimeException("Failed : HTTP error code : "
             + resp.getStatus());
    }

    System.out.println("Output from Server .... \n");
    String output = resp.getEntity(String.class);
    System.out.println(output);

} catch (Exception e) {

    e.printStackTrace();

}
}


    }
package com.post;

import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

@Path("/priya/metallica")
public class JSONService {

    @POST
    @Path("/post")
    @Consumes(MediaType.TEXT_PLAIN)
    public Response createTrackInJSON(Track track) {

        String result = "Track saved : " + track;
        return Response.status(201).entity(result).build();

    }
}
package com.post;

public class Track {

    private String singer;
    private String title;

    public String getSinger(){
        return singer;
    }
    public void setSinger(String singer){
        this.singer=singer;
    }
    public String getTitle(){
        return title;

    }
    public void setTitle(String title){
        this.title =title;
    }

}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>PostExample</display-name>
 <servlet>
 <servlet-name>jersey-serlvet</servlet-name>
 <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
 <init-param>
 <param-name>com.sun.jersey.config.property.packages</param-name>
 <param-value>com.post</param-value>
 </init-param>

 <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
 <servlet-name>jersey-serlvet</servlet-name>
 <url-pattern>/rest/*</url-pattern>
 </servlet-mapping>
</web-app>
web.xml:

package com.post;

import javax.ws.rs.core.MediaType;

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;

public class JerseyClientPost {

    public static void main(String[] args) {
        try{
        // TODO Auto-generated method stub
  Client client = Client.create();
  WebResource r = client.resource("http://localhost:8080/PostExample/rest/priya/metallica/post");
  String input = "{\"singer\":\"Metallica\",\"title\":\"Fade To Black\"}";
  ClientResponse resp = r.accept(MediaType.TEXT_PLAIN).post(ClientResponse.class, input);
  if (resp.getStatus() != 201) {
        throw new RuntimeException("Failed : HTTP error code : "
             + resp.getStatus());
    }

    System.out.println("Output from Server .... \n");
    String output = resp.getEntity(String.class);
    System.out.println(output);

} catch (Exception e) {

    e.printStackTrace();

}
}


    }
package com.post;

import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

@Path("/priya/metallica")
public class JSONService {

    @POST
    @Path("/post")
    @Consumes(MediaType.TEXT_PLAIN)
    public Response createTrackInJSON(Track track) {

        String result = "Track saved : " + track;
        return Response.status(201).entity(result).build();

    }
}
package com.post;

public class Track {

    private String singer;
    private String title;

    public String getSinger(){
        return singer;
    }
    public void setSinger(String singer){
        this.singer=singer;
    }
    public String getTitle(){
        return title;

    }
    public void setTitle(String title){
        this.title =title;
    }

}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>PostExample</display-name>
 <servlet>
 <servlet-name>jersey-serlvet</servlet-name>
 <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
 <init-param>
 <param-name>com.sun.jersey.config.property.packages</param-name>
 <param-value>com.post</param-value>
 </init-param>

 <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
 <servlet-name>jersey-serlvet</servlet-name>
 <url-pattern>/rest/*</url-pattern>
 </servlet-mapping>
</web-app>

后例
泽西塞尔维特酒店
com.sun.jersey.spi.container.servlet.ServletContainer
com.sun.jersey.config.property.packages
com.post
1.
泽西塞尔维特酒店
/休息/*

我也尝试过使用XMl格式,在pojo/resource/client中使用相应的注释,但出现了相同的HTTP405错误

据我所知,传递对象时应使用
应用程序/json
媒体类型。因此,我会在所有代码中使用它,并在
客户端中使用它。制作

尝试以下步骤来解决上述问题

  • 将consumes从纯文本更改为JSON(@consumes(MediaType.ApplicationJson))
  • 在rest客户端中,使用下面的代码创建JSON POST请求使用以下代码 ClientResponse response=webResource.type(“应用程序/json”) .post(ClientResponse.class,输入);
  • 尝试从外部rest客户机(如postman)调用该服务,看看它是如何实现的 去
  • 最重要的是,请在名为“Track”的bean上实现可序列化的接口

  • @vinS这里的所有内容都是分析问题所需要的。请在提问时具体说明。发布整个代码对任何人都没有帮助。抱歉。当从客户端(JerseyclientPost)向Rest资源(JSONservice)发送post请求时,我收到HTTP 405错误-不允许使用方法。我只是尝试用客户端的数据创建一个跟踪(Pojo类)。对于客户端发送的请求类型,我尝试了JSON和纯文本MediaType。但我得到了HTTP 405错误。如果你需要关于这个问题的任何信息,请告诉我