J'ai du mal à mapper un message JSON à un objet Java particulier pour l'enregistrer via Les en-têtes de l'appel AJAX sont correctement définis ... P> 415 Unsupported Media Type
4 Réponses :
Une chose que vous pouvez essayer est de déterminer si le problème est avec la liaison des données de Jackson (ne parvient pas à sérialiser l'objet hibernate) ou à quelque chose d'autre. Cela peut être fait en construisant manuellement ObjectMapper, vérifiant si «MAPPER.SERIALIZEVALUEASString () 'fonctionne ou jette une exception. P>
Il y a une bonne chance que cela a à voir avec Jackson Maniping de propriétés chargées de manière paresseuse; Si tel est le cas, vous devrez peut-être utiliser Module Hibernate Jackson car il peut gérer les détails spécifiques à l'hibernate . P>
Je reçois le message d'erreur 'defaultreference': type de référence arrière (java.util.set) non compatible avec le type géré (
Stanmax mène mon dans la bonne direction ...
Je devais d'abord définir le Voir la description ici
http://wiki.fasterxml.com/jacksonfeaturebidirreferences P> @jsonbackreferferferferferferferference est la partie "arrière" de référence: elle sera omise de la sérialisation et ré-construites lors de la désérialisation de la référence directe. P>
Le problème dans mon cas était que je n'ai pas envoyé suffisamment d'informations dans mon message JSON pour correspondre aux exigences en matière d'hibernate. P> Ceci a abouti à une exception que les champs appropriés pour créer un L'objet hibernate de mon poste JSON n'est pas présent, n'était pas présent. P> J'ai créé une URL de test où j'ai créé le mappeur d'objet moi-même et j'ai essayé de désexerminez JSON à la main à la main. Ceci jette le bon message d'erreur. P> Il semble que mon ressort ne puisse malheureusement que l'exception 415 "de type multimédia non supporté" qui est un peu trompeuse. P> Donc pour l'avenir. Essayez-la à la main en premier (voir exemple inclus) et que de continuer. P> @jsonmaningreference code> et
@jsonbackreference code> droite. J'ai défini la gestion de la référence à l'attribut qui représente la relation
ModelMap map = new ModelMap();
logger.info("HibernateAware");
HibernateAwareObjectMapper mapper = new HibernateAwareObjectMapper();
String jsonInput =
"{" +
"\"id\":\"1\"," +
"\"matCountry\":{" +
"\"id\":\"1\"" +
"}" +
"}";
Seizure seizure = mapper.readValue(jsonInput, Seizure.class); // this line throw the exception
Cela a totalement sauvé ma journée ... semaine. Vraiment Message d'erreur malade en effet !! Comment cela est possible?
@Jeremys. Sauve-moi ! +1
J'ai eu le même problème. Après avoir lu comment MappingjacksonhttpMessagecverter travaille, j'ai compris que je ne l'avais pas initialisé correctement. J'ai donc utilisé ce qui suit dans mon Rest-servle.xml et cela a fonctionné ..
<bean id="jsonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" /> <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> <property name="mediaTypes"> <map> <entry key="json" value="application/json" /> </map> </property> <property name="defaultViews"> <list> <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"> <property name="objectMapper"> <ref bean="JacksonObjectMapper" /> </property> </bean> </list> </property> <property name="favorPathExtension" value="false" /> <property name="favorParameter" value="true" /> <property name="useNotAcceptableStatusCode" value="true" /> </bean> <bean id="JacksonObjectMapper" class="org.codehaus.jackson.map.ObjectMapper" />
J'ai eu un problème similaire, qui était dû au fait que l'une de mes classes avait une carte avec un type de clé non primitive. J'ai pu @jsonignore sur ce champ pour contourner le problème. P>