我想将一个JSON对象从我的页面发布到Rest WS。但是当我通过jQuery ajax调用作为输出发布json时,我得到一个HTML页面,其中包含" HTTP状态405 - 方法不允许"我从Rest Web Service发送的JSON的instate。请参阅以下代码段。
我正在使用jquery 1.11.3版本。
http://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js
jQuery Ajax Call:
$.ajax({
url: "http://localhost:8080/MyWebService/api/myService/jsonpost",
method: "POST",
data: jsonObj,
dataType: 'application/json',
contentType: "application/json",
success: function(result){
alert(result);
},
error(){
console.log('Error');
}
});
请注意我的其他网络服务正在我的本地tomcat中运行。
请查找我的Rest Web Service POST代码。
@POST
@Path("/jsonpost")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public String crunchifyJsonPostREST(SampleVO input) throws JSONException{
SampleVO sampleVO = input;
return new Gson().toJson(sampleVO);
}
VO:
public class SampleVO {
private String name;
/**
* @return the name
*/
@XmlElement
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
}
我的Maven依赖关系是:
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.8</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.8</version>
</dependency>
Firebug详细信息:
请找到我的ajax请求标题。
请找到我的ajax响应和响应HTML。
需要您的帮助来解决此问题。
谢谢你的到来。
解决方案:
经过大量的谷歌搜索,我找到了一些解决方案。现在我正在使用HTTP-Proxy-Servlet。
我用我的html页面创建了一个带有ajax调用的java web应用程序,从我的ajax调用我调用的是同一个域的URL。请参考我的ajax电话。
$.ajax({
url: "rest/api/crunchifyService/jsonpost",
method: "POST",
data: JSON.stringify(jsonObj),
dataType: 'json',
contentType: "application/json",
success: function(result,status,jqXHR ){
//Do something
},
error(jqXHR, textStatus, errorThrown){
//Do something
}
});
现在我使用org.mitre.dsmiley.httpproxy.ProxyServlet完成了相同的域调用映射。请参考我的网站xml。
<servlet>
<servlet-name>proxy</servlet-name>
<servlet-class>org.mitre.dsmiley.httpproxy.ProxyServlet</servlet-class>
<init-param>
<param-name>targetUri</param-name>
<param-value><!-- Cross domain URL goes here --></param-value>
</init-param>
<init-param>
<param-name>log</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>proxy</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
现在我的ajax正在调用此代理Servlet,它正在重定向到CROS目标Rest Web服务。
请参阅以下网址,您将获得更多详细信息。
答案 0 :(得分:1)
数据类型应为dataType: 'json'
如果您使用的是contentType: "application/json",
,那么您应该对数据进行字符串化。
data:JSON.stringify(jsonObj),
答案 1 :(得分:1)
经过大量的谷歌搜索,我找到了一些解决方案。现在我正在使用HTTP-Proxy-Servlet。
我用我的html页面创建了一个带有ajax调用的java web应用程序,从我的ajax调用我调用的是同一个域的URL。请参考我的ajax电话。
{{1}}
现在我使用org.mitre.dsmiley.httpproxy.ProxyServlet完成了相同的域调用映射。请参考我的网站xml。
{{1}}
现在我的ajax正在调用此代理Servlet,它正在重定向到CROS目标Rest Web服务。
请参阅以下网址,您将获得更多详细信息。
答案 2 :(得分:0)
尝试使用type&amp; ajax的contentType设置:
type:'POST',
contentType: 'application/json',
示例:
function loadDoc(){
var num = '{"empid": 45,"name": "gaurav","salary":566.55}';
$.ajax({
url: 'http://localhost:9029/addS',
method: 'POST',
type:'POST',
contentType: 'application/json',
success: function(response){
console.log("response::::"+response);
$("#output").text(response);
},
error: function( jqXHR,textStatus, errorThrown){
console.log("Error askdjk");
console.log(jqXHR);
console.log(textStatus);
console.log(errorThrown);
}
});
}