jquery Ajax无法使用Spring 3.2.3

时间:2015-04-29 14:27:40

标签: jquery spring spring-mvc

我正在尝试学习SPRING MVC + Jquery Ajax,但我在ajax成功时收到此错误,以下是我的代码配置

jQuery Ajax。

$.ajax({
        type:"GET",
        url:"" +attr.url +"",
        contentType: "application/json",
        success:function(response){
                            console.log("Response length",response.length);
                        },
                        error:function(e){
                        }
                    });

Spring Controller

@RequestMapping(value ="/getList.htm", method= RequestMethod.GET)
    public @ResponseBody List<SomeClass> _giveList(HttpServletResponse response) throws DaException{
        List<SomeClass>someClass = iSomeClass.getData();
        return someClass;
    }

此方法正在执行,我可以看到someClass的大小。 applicationContext.xml中的jackObjectMapper配置

<bean id="jacksonObjectMapper" class="org.codehaus.jackson.map.ObjectMapper"></bean>
    <bean id="jacksonMessageChanger" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
    <property name="supportedMediaTypes" value="application/json"/>
    </bean>

    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="messageConverters">
    <list>
    <ref bean = "jacksonMessageChanger"/>
    </list>
    </property>
     </bean>

jackson dependency in POM.xml

    <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.2.3</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.2.3</version>
</dependency>
<dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>2.2.3</version>
    </dependency>
    <dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-core-asl</artifactId>
    <version>1.9.13</version>
</dependency>
<dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>1.9.13</version>
  </dependency>

控制器方法正在执行,但是ajax请求中没有响应。所以我没有看到ajax成功函数的控制台日志。 但是我收到了这个错误

此请求标识的资源只能根据请求“accept”标头生成具有不可接受特征的响应。 我试图通过添加headers =“application / json”来解决这个问题。但没有运气。 任何帮助都将是真正可感知的。

3 个答案:

答案 0 :(得分:0)

当弹簧mvc框架无法将表示(在您的情况下为json)从/向java对象转换时,您遇到的问题是典型的。这可能是由于配置转换器时出错或进程中出错。

您的案例是前者,Spring 3.x您应该删除当前的杰克逊依赖关系并使用例如。

<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.9.13</version>
</dependency>

com.fasterxml.jackson是用于jackson 2.x Spring 4.x版本的jackson使用的包。

使用当前代码,效果与完全不具有arsort($frequency); $newArray = array_keys($frequency); 依赖关系相同,后者负责转换json / java转换,这就是您收到错误的原因

答案 1 :(得分:0)

您希望响应数据是否为JSON?

$.ajax({
    type:"GET",
    url:"" +attr.url +"",

    // contentType is the type of data you're sending, Since you're not sending any
    // data, I assume you expect the response to be in JSON format, so you need
    // to change it to dataType: "json"
    contentType: "application/json",
    success:function(response){
        console.log("Response length",response.length);
    },
    error:function(e){
    }
});

因此,如果您希望数据列表采用JSON格式,则可能需要告知Contoller其produces类型。您不需要显式指定它,因为您已经定义了JacksonObjectMapper,但只是尝试它。

@RequestMapping(value ="/getList.htm", method= RequestMethod.GET, produces=MediaType.APPLICATION_JSON_VALUE) 
                                                                 // ^ It's not necessary to specify like this, but just try it
public @ResponseBody List<SomeClass> _giveList(HttpServletResponse response) throws DaException{
    List<SomeClass>someClass = iSomeClass.getData();
    return someClass;
}

答案 2 :(得分:0)

我从这篇文章中找出了问题。406 Not Acceptable: Spring 3.2 + JSON + AJAX 我用.son取代了.htm,它起作用了。我不知道弹簧3的问题是什么.htm