En essayant d'obtenir ma réponse en JSON en utilisant Spring 3.x, j'obtiens l'erreur 406 "La ressource identifiée par cette requête est seulement capable de générer des réponses avec des caractéristiques non acceptables selon les en-têtes "accept" de la requête ()".
Voici mon environnement
- Spring 3.2.0.RELEASE
- inclus jackson-mapper-asl-1.7.9.jar, jackson-core-asl-1.7.9.jar
- Tomcat 6.x
- mvc:annotation-driven dans le fichier XML de configuration de Spring
Mon contrôleur :
@RequestMapping("/contest")
public class ContestController {
@RequestMapping(value="{name}", headers="Accept=*/*", method = RequestMethod.GET)
public @ResponseBody Contest getContestInJSON(@PathVariable String name) {
Contest contest = new Contest();
contest.setName(name);
contest.setStaffName(new String("contestitem1"));
return contest;
}
}
Mon fichier de configuration de Spring
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<context:component-scan base-package="com.contestframework.controllers" />
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="mediaTypes">
<map>
<entry key="atom" value="application/atom+xml"/>
<entry key="html" value="text/html"/>
<entry key="json" value="application/json"/>
</map>
</property>
<property name="viewResolvers">
<list>
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
</list>
</property>
<property name="defaultViews">
<list>
<bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
</list>
</property>
</bean>
<mvc:annotation-driven />
</beans>
Après cela, j'accède simplement au contrôleur en utilisant la méthode ci-dessous :
http://domain/SpringWebProject/json/contest/abcd
et la réponse que j'obtiens est le statut 406 : "La ressource identifiée par cette requête est seulement capable de générer des réponses avec des caractéristiques non acceptables selon les en-têtes "accept" de la requête ()".
J'ai également essayé un mécanisme alternatif en accédant à ceci en utilisant javascript ajax pour m'assurer que mon en-tête de demande a application/JSON mais cela a conduit au même résultat Status 406
$.getJSON('contest/abcd', function(data) {
console.log(data) }
Voici mon REQUEST HEADER capturé à partir du navigateur :
Request URL:http://localhost:8080/SpringWebProject/json/contest/abcd
Request Method:GET
Status Code:406 Not Acceptable
Accept:application/json, text/javascript, */*; q=0.01
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Cookie:JSESSIONID=59689C95B0B9C21494EB0AB9D9F7BCCD
Host:localhost:8080
Referer:http://localhost:8080/SpringWebProject/json/welcome
User-Agent:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4
X-Requested-With:XMLHttpRequest
Response Headersview source
Content-Length:1070
Content-Type:text/html;charset=utf-8
Date:Fri, 12 Oct 2012 18:23:40 GMT
Server:Apache-Coyote/1.1
J'apprécierais toute aide à cet égard.