我正在尝试学习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”来解决这个问题。但没有运气。 任何帮助都将是真正可感知的。
答案 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