В Spring boot 1.2.5 с интерфейсом Jersey 2, как я могу настроить маршаллера JSON, чтобы он не включал поля с нулевыми значениями?Spring Boot 1.2.5 & Jersey 2 игнорировать поля нуля
Например:
[
{
"created": 1433987509174,
"lastModified": 1433876475580,
"id": 1,
"example": "example1b"
},
{
"created": 1434502031212,
"lastModified": 1434502031212,
"id": 10000,
"example": "example1c"
},
{
"created": 1439151444176,
"lastModified": 1439151444176,
"id": 10011,
"example": null
}
]
Поле "example": null
не должны быть включены в выходной JSon вообще, но здесь это указать это нуль.
В моем классе @SpringBootApplication, я попытался добавить:
@Bean
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
final MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
final ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
converter.setObjectMapper(objectMapper);
return converter;
}
или
@Bean
@Primary
public Jackson2ObjectMapperBuilder objectMapperBuilder() {
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
builder.serializationInclusion(JsonInclude.Include.NON_NULL);
return builder;
}
или
@Primary
@Bean
public ObjectMapper mapper() {
final ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
return objectMapper;
}
и/или добавление @JsonSerialize (в том числе = включение. NON_NULL) к самому объекту
Но он по-прежнему производит тот же самый ответ выше с включенным "example": null
.
Он работал с Spring 3.0.7 с @JsonSerialize(include=Inclusion.NON_NULL)
, но теперь он больше не работает, когда я портировал Spring Boot 1.2.5.
Я полагаю, что я следил за документацией http://docs.spring.io/spring-boot/docs/current/reference/html/howto-spring-mvc.html#howto-customize-the-jackson-objectmapper, и это не работает, поэтому я надеюсь, что кто-то может увидеть что-то, что мне не хватает? Заранее спасибо!
Edit: Также просто попытался добавить класс:
@Configuration
public class WebConfiguration extends WebMvcAutoConfiguration {
@Primary
@Bean
public ObjectMapper mapper() {
final ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
return objectMapper;
}
}
Решение:
package com.my.spring;
import javax.ws.rs.ext.ContextResolver;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.servlet.ServletProperties;
import org.springframework.context.annotation.Configuration;
import com.my.spring.service.rs.MyRestServiceImpl;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
@Configuration
public class JerseyConfiguration extends ResourceConfig {
public class ObjectMapperContextResolver implements ContextResolver<ObjectMapper> {
private final ObjectMapper mapper;
public ObjectMapperContextResolver() {
mapper = new ObjectMapper();
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
}
@Override
public ObjectMapper getContext(Class<?> type) {
return mapper;
}
}
public JerseyConfiguration() {
register(new ObjectMapperContextResolver());
register(MyRestServiceImpl.class); // My jax-rs implementation class
property(ServletProperties.FILTER_FORWARD_ON_404, true); // Not needed for this non_null issue
}
}
Спасибо! Имеет смысл, что вместо преобразователя весов используется каркас джерси, поскольку я выбрал интерфейс JAX-RS. Это решение работает. Почему-то этот вопрос не появился в моем поиске, или это могло бы немного смутить меня. – Chip