Java 带有POST请求的简单Restful服务导致HTTP 405错误:不允许使用方法
我刚开始休息工作。下面是我完整的源代码。我尝试过JSON类型,甚至纯文本(text/plain)类型。还在 不允许使用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
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错误。如果你需要关于这个问题的任何信息,请告诉我