Mein Ziel ist es, die zu konfigurieren objectMapper
, dass nur Elemente serialisiert werden, mit denen Anmerkungen versehen sind @JsonProperty
.
Um dies zu tun, folgte ich diesem Zweck habe Erklärung der angegeben ist, wie der Objectmapper konfiguriert wird.
Ich habe den benutzerdefinierten Objectmapper wie beschrieben eingefügt hier .
Allerdings wenn die Klasse NumbersOfNewEvents
serialisiert wird, enthält sie jedoch weiterhin alle Attribute im JSON.
Hat jemand einen Hinweis? Danke im Voraus
Jackson 1.8.0 Frühling 3.0.5
CustomObjectMapper
public class CompanyObjectMapper extends ObjectMapper {
public CompanyObjectMapper() {
super();
setVisibilityChecker(getSerializationConfig()
.getDefaultVisibilityChecker()
.withCreatorVisibility(JsonAutoDetect.Visibility.NONE)
.withFieldVisibility(JsonAutoDetect.Visibility.NONE)
.withGetterVisibility(JsonAutoDetect.Visibility.NONE)
.withIsGetterVisibility(JsonAutoDetect.Visibility.NONE)
.withSetterVisibility(JsonAutoDetect.Visibility.DEFAULT));
}
}
servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.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="de.Company.backend.web" />
<mvc:annotation-driven />
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="objectMapper" ref="jacksonObjectMapper" />
</bean>
</list>
</property>
</bean>
<bean id="jacksonObjectMapper" class="de.Company.backend.web.CompanyObjectMapper" />
</beans>
NumbersOfNewEvents
public class NumbersOfNewEvents implements StatusAttribute {
public Integer newAccepts;
public Integer openRequests;
public NumbersOfNewEvents() {
super();
}
}
JacksonConfiguration
? Es ist eine automatische Möglichkeit, Spring Boot anzuweisen, diese Klasse als Konfigurationsklasse für Jackson zu verwenden.@EnableWebMvc
? Ich bezweifle, weil ... siehe in meiner Antwort : Warum ist die Verwendung von @EnableWebMvc ein Problem?Es kann sein, dass ich Spring 3.1 verwende (anstelle von Spring 3.0.5, wie in Ihrer Frage angegeben), aber Steve Eastwoods Antwort hat bei mir nicht funktioniert. Diese Lösung funktioniert für Spring 3.1:
In Ihrem Frühlings-XML-Kontext:
quelle
Das gibt es schon
org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean
lange. Ab Version 1.2 von Spring Boot gibt esorg.springframework.http.converter.json.Jackson2ObjectMapperBuilder
für Java Config.In String Boot kann die Konfiguration so einfach sein wie:
in
classpath:application.properties
oder ein Java-Code in der@Configuration
Klasse:Sehen:
quelle
Jackson2ObjectMapperBuilder builder = Jackson2ObjectMapperBuilder.json()
.Ich habe dies mit Jackson 2.x und Spring 3.1.2+ verwendet
servlet-context.xml:
Beachten Sie, dass das Stammelement ist
<beans:beans>
, sodass Sie je nach Einrichtung möglicherweise einige dieser Elemente entfernenbeans
und hinzufügen müssenmvc
.au.edu.unimelb.atcom.transfer.json.mappers.JSONMapper.java:
DateSerializer.java:
DateDeserializer.java:
quelle
Ich habe die Lösung jetzt basierend auf https://github.com/FasterXML/jackson-module-hibernate gefunden
Ich habe den Objekt-Mapper erweitert und die Attribute im geerbten Konstruktor hinzugefügt.
Dann wird der neue Objekt-Mapper als Bean registriert.
quelle
ObjectMapper
als@Component
und erstreckt@Primary
. Dies ist der im Spring Reference Guide empfohlene Ansatz, der für mich gut funktioniert hat.Wenn Sie einen benutzerdefinierten ObjectMapper zum Registrieren benutzerdefinierter Serializer hinzufügen möchten, versuchen Sie meine Antwort.
In meinem Fall (Spring 3.2.4 und Jackson 2.3.1), XML-Konfiguration für benutzerdefinierten Serializer:
wurde auf unerklärliche Weise von etwas auf Standard zurückgeschrieben.
Das hat bei mir funktioniert:
CustomObject.java
CustomObjectSerializer.java
In
<mvc:message-converters>(...)</mvc:message-converters>
meiner Lösung ist keine XML-Konfiguration ( ) erforderlich.quelle
Ich verwende Spring 4.1.6 und Jackson FasterXML 2.1.4.
Dies funktioniert bei meiner applicationContext.xml-Konfigration
quelle
LÖSUNG 1
Erste funktionierende Lösung (getestet), die besonders bei Verwendung von @EnableWebMvc nützlich ist:
LÖSUNG 2
Natürlich funktioniert auch der folgende allgemeine Ansatz (auch mit @EnableWebMvc):
Warum ist die Verwendung von @EnableWebMvc ein Problem?
@EnableWebMvc verwendet,
DelegatingWebMvcConfiguration
was erweitert,WebMvcConfigurationSupport
was dies tut:Dies bedeutet, dass es keine Möglichkeit gibt, Ihre eigenen
ObjectMapper
zu injizieren , um sie für die Erstellung der StandardeinstellungMappingJackson2HttpMessageConverter
bei Verwendung von @EnableWebMvc vorzubereiten.quelle
In Spring Boot müssen
2.2.x
Sie es folgendermaßen konfigurieren:Kotlin:
quelle
Oberhalb von Spring 4 ist keine Konfiguration erforderlich,
MappingJacksonHttpMessageConverter
wenn Sie nur die Konfiguration beabsichtigenObjectMapper
.(Durch das Konfigurieren
MappingJacksonHttpMessageConverter
verlieren Sie andere MessageConverter.)Sie müssen nur tun:
Erstellen Sie in Ihrer Spring-Konfiguration diese Bean:
quelle
_halObjectMapper: defined in null
Um eine Nachricht Konverter im Klarfeder Web zu konfigurieren, in diesem Fall die Java 8 JSR-310 JavaTimeModule zu aktivieren, müssen Sie zuerst implementieren
WebMvcConfigurer
in Ihrer@Configuration
Klasse und dann setzen die ZuweisungconfigureMessageConverters
Methode:Auf diese Weise können Sie alle benutzerdefinierten Elemente registrieren, die
ObjectMapper
in einer Java-basierten Spring-Konfiguration definiert sind.quelle
extendMessageConverters
gemäß der Spring-Dokumentation . Aber ich hatte keine Notwendigkeit dafür, weil ich nur eine maßgeschneiderte braucheMappingJackson2HttpMessageConverter
.Ich verwende Spring 3.2.4 und Jackson FasterXML 2.1.1.
Ich habe einen benutzerdefinierten JacksonObjectMapper erstellt , der mit expliziten Anmerkungen für jedes Attribut der zugeordneten Objekte arbeitet:
Dies wird dann in der Kontextkonfiguration ( servlet-context.xml ) instanziiert :
Das funktioniert gut!
quelle