我试图在spring mvc应用程序中从jquery Ajax调用中获取JSON响应。当我在控制器方法中看到调试语句时,请求看起来很好。但是,我一直看到HTTP 406错误( GET http://:8080 / SampleFormEventInSpring / getData.html 406 Not Acceptable )。我的设置如下。任何帮助都非常感谢
Spring 3.2
jackson-mapper-asl-1.7.4.jar
jackson-core-asl-1.7.4
Eclispe Juno Service Release 2
http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
响应标题
Content-Language en
Content-Length 1067
Content-Type text/html;charset=utf-8
Date Sun, 05 Oct 2014 01:06:16 GMT
Server Apache-Coyote/1.1
请求标题
Accept application/json
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Cookie JSESSIONID=31E855326C016B194B0F013FEC470FAD
Host localhost:8080
Referer http://localhost:8080/SampleFormEventInSpring/event.html
User-Agent Mozilla/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0
X-Requested-With XMLHttpRequest
控制器代码
@RequestMapping(value = "/getData", method = RequestMethod.GET)
@ResponseBody
public List<Data> getProviderList() {
System.out.println("Inside EventController.getData Begin");
List<Data> dataList = new ArrayList<Data>();
Data pData = new Data();
pData.setId("0012M");
pData.setName("Group");
dataList.add(pData);
pData = new Data();
pData.setId("12345");
pData.setName("Individual");
dataList.add(pData);
for(Data iPdata : dataList) {
System.out.println("pID : " + iPdata.getId() + ",pNAME : " + iPdata.getName());
}
System.out.println("Inside EventController.getData End");
return dataList;
}
Data.java
public class Data {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
JS
$(document).ready(function() {
$("#getData").click(function(){
$.ajax({
type:'GET',
url:'getData.html',
dataType: 'json',
success:function(data){
alert("Success");
}
});
});
答案 0 :(得分:0)
不要忘记您的回复标题:
Content-Type text/html;charset=utf-8
应该是:
Content-Type application/json
答案 1 :(得分:0)
将标题添加到请求映射头= {&#34; application / json&#34; }
应该看起来像:
控制器代码
@RequestMapping(value = "/getData", method = RequestMethod.GET,headers = { "application/json" })
@ResponseBody
public List<Data> getProviderList() {
System.out.println("Inside EventController.getData Begin");
...
jQuery代码看起来很好,但是看到Manuel Jordan回答,他说你正在映射到getData而不是getData。 html 。
因此,请确保您的调度程序servlet在web.xml中映射到
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
或为rest reqest定义和附加后缀,例如&#34;上传.json&#34;
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.json</url-pattern>
</servlet-mapping>
并相应地更改映射。
我在github中有一个类似的项目https://github.com/ramanh3/rest-json也许它可以提供帮助。
答案 2 :(得分:0)
我遇到了同样的问题
从您的 jQuery 和 @RequestMapping 了解要使用的网址,修改
这
getData.html
到
getData
是的,请移除.html
扩展程序。
此外:您有url:'getData.html',
和@RequestMapping(value = "/getData"
他们不匹配。
从
改变到