Registrator MappingJackson2HttpMessageConverter im Frühjahr 3.1.2 mit JAXB-Annotationen

8

Ich habe eine Reihe von Entitäten mit JAXB-Annotationen, die ich mithilfe eines Nachrichtenkonverters in JSON konvertieren möchte.

Ich weiß, dass mein ObjectMapper, der die JAXB-Annotationen liest, funktioniert:

%Vor%

Aber wenn ich meinen Rest-Service anrufe, scheint der standardmäßig registrierte MappingJacksonHttpMessageConverter (der nicht zum Lesen von JAXB konfiguriert ist) zu übernehmen - was zu einem Stackoverflow aufgrund zyklischer Referenzen führt, wenn @XmlTransient ignoriert wird ...

Wie konfiguriere ich Spring, um MappingJackson2HttpMessageConverter zu verwenden?

Aktuelle Konfiguration

%Vor%

REST-Service

%Vor%

Abhängigkeiten

%Vor%

UPDATE / Lösung

Beim Debuggen meines Kontexts konnte ich sehen, dass die Konfiguration in <mvc:annotation-driven> keine Auswirkung hatte.

Es stellte sich heraus, dass mein Komponententest mit MockMcv immer die Standard-Handle-Register geladen hat, wodurch mein benutzerdefinierter Objektmapper ignoriert wurde. Aus praktischen Gründen habe ich den Controller nur mit dem Junit-Test getestet, da er den Controller traf. Ich dachte nicht, dass dies ein wahrscheinlicher Fehler ist ...

Ich habe noch keine Lösung für meinen Test gefunden, aber wenn ich den Dienst mit curl anrufe, funktioniert alles!

UPDATE / endgültige Lösung

Habe gerade eine Lösung für meinen Testaufbau gefunden; Wenn Sie MockMvc (spring-test-mvc) verwenden, müssen Sie explizite benutzerdefinierte Nachrichtenkonverter angeben:

%Vor%

Das einzige verbleibende Problem besteht darin, dass jacksonMessageConverter nicht direkt mit dem Autowire verbunden werden kann, bis das folgende JIRA behoben ist: Ссылка . Bis dahin habe ich gerade eine Kopie des jacksonMessageConverter in meinem Testkontext erstellt.

    
molholm 20.09.2012, 14:00
quelle

1 Antwort

3

Ich habe Ihre Konfiguration repliziert und es funktioniert perfekt für mich. Die Standard-Nachrichtenkonverter sollten nicht wirksam werden, da Sie das Attribut register-defaults=false explizit angegeben haben. So sieht meine @ XmlTransient-Annotation aus:

%Vor%     
Biju Kunjummen 20.09.2012, 22:19
quelle

Tags und Links