HTTP状态406. Spring MVC 3.2,jQuery,JSON

时间:2014-10-05 01:25:39

标签: jquery ajax json spring

我试图在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");
        }
    });
});

3 个答案:

答案 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" 他们不匹配。

改变
  • `URL: 'getData.html'

  • `URL: '的getData'