Wie konfiguriert man Spring mvc 3, um kein "Null" -Objekt in der JSON-Antwort zurückzugeben?
einer Stichprobe von json-Antwort sieht wie folgt aus:
{"publicId":"123","status":null,"partner":null,"description":null}
Wäre es schön, abschneiden, alle null-Objekte in der Antwort. In diesem Fall, die Antwort würde {"publicId":"123"}
.
Irgendwelche Ratschläge? Danke!
P. S: ich glaube, ich kann das in Jersey. Auch ich glaube, dass Sie sowohl Jackson als JSON-processer.
Später Hinzugefügt:
Meine Konfiguration:
<?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"
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">
<!-- Scans the classpath of this application for @Components to deploy as beans -->
<context:component-scan base-package="com.SomeCompany.web" />
<!-- Application Message Bundle -->
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="/WEB-INF/messages/messages" />
<property name="cacheSeconds" value="0" />
</bean>
<!-- Configures Spring MVC -->
<import resource="mvc-config.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:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<!-- Configures the @Controller programming model -->
<mvc:annotation-driven />
<!-- Forwards requests to the "/" resource to the "welcome" view -->
<!--<mvc:view-controller path="/" view-name="welcome"/>-->
<!-- Configures Handler Interceptors -->
<mvc:interceptors>
<!-- Changes the locale when a 'locale' request parameter is sent; e.g. /?locale=de -->
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
</mvc:interceptors>
<!-- Saves a locale change using a cookie -->
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver" />
<!--<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"/>
<entry key="xml" value="text/xml"/>
</map>
</property>
<property name="viewResolvers">
<list>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
</list>
</property>
<property name="defaultViews">
<list>
<bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
<bean class="org.springframework.web.servlet.view.xml.MarshallingView" >
<property name="marshaller">
<bean class="org.springframework.oxm.jaxb.Jaxb2Marshaller" />
</property>
</bean>
</list>
</property>
</bean>
-->
<!-- Resolves view names to protected .jsp resources within the /WEB-INF/views directory -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
Mein code:
@Controller
public class SomeController {
@RequestMapping(value = "/xyz", method = {RequestMethod.GET, RequestMethod.HEAD},
headers = {"x-requested-with=XMLHttpRequest","Accept=application/json"}, params = "!closed")
public @ResponseBody
List<AbcTO> getStuff(
.......
}
}
InformationsquelleAutor der Frage Bobo | 2011-05-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, Sie können dies für einzelne Klassen durch kommentieren Sie mit
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
oder Sie können es über das Brett, indem Sie IhrenObjectMapper
Einstellung der Serialisierung EingliederungJsonSerialize.Inclusion.NON_NULL
.Hier einige Infos aus dem Jackson-FAQ: http://wiki.fasterxml.com/JacksonAnnotationSerializeNulls.
Anmerkungen zu den Klassen ist einfach, aber die Konfiguration der
ObjectMapper
Serialisierung config etwas schwieriger. Es gibt einige spezifische Informationen auf dem tun der letzteren hier.InformationsquelleAutor der Antwort BennyFlint
Nicht die Frage beantworten, aber dies ist das zweite google-Ergebnis.
Wenn jemand hier her kommt und will, tun Sie es für den Frühling 4 (wie es mir passiert ist), können Sie die annotation
auf die Rückkehr der Klasse.
Wie bereits erwähnt in den Kommentaren, und im Fall, dass jemand verwirrt ist, die Anmerkung soll verwendet werden, in der Klasse, die umgewandelt werden zu JSON.
InformationsquelleAutor der Antwort Mário Fernandes
Wenn mit Spring-Boot für den REST, die Sie tun können, es in
application.properties
:Quelle
InformationsquelleAutor der Antwort Luís Soares
Java-Konfiguration für das oben erwähnte. Legen Sie einfach die unten in @Configuration-Klasse.
InformationsquelleAutor der Antwort Norbert