7
votes

Spring MVC: @Responsebody, 415 Type de média non pris en charge

J'ai du mal à mapper un message JSON à un objet Java particulier pour l'enregistrer via hibernate strong>

Les en-têtes de l'appel AJAX sont correctement définis ... P>

415 Unsupported Media Type


0 commentaires

4 Réponses :


4
votes

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.

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 .


1 commentaires

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é ()



14
votes

Stanmax mène mon dans la bonne direction ...

Je devais d'abord définir le @jsonmaningreference code> et @jsonbackreference code> droite. J'ai défini la gestion de la référence à l'attribut qui représente la relation une forte> de la relation une à plusieurs em> em>, mais vous devez apparemment la mettre à la beaucoup fort> attribut (la collection) p>

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>

  • La propriété annotée doit être de type de haricot li> ul> blockQuote>

    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>

     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
    


2 commentaires

Cela a totalement sauvé ma journée ... semaine. Vraiment Message d'erreur malade en effet !! Comment cela est possible?


@Jeremys. Sauve-moi ! +1



2
votes

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" />


0 commentaires

0
votes

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.


0 commentaires