Вопрос по json, spring – Spring @ResponseBody Джексон JsonSerializer с JodaTime

14

У меня ниже Serializer для обработки JodaTime:

public class JodaDateTimeJsonSerializer extends JsonSerializer<DateTime> {

    private static final String dateFormat = ("MM/dd/yyyy");

    @Override
    public void serialize(DateTime date, JsonGenerator gen, SerializerProvider provider)
            throws IOException, JsonProcessingException {

        String formattedDate = DateTimeFormat.forPattern(dateFormat).print(date);

        gen.writeString(formattedDate);
    }

}

Затем, на каждой модели объектов, я делаю это:

@JsonSerialize(using=JodaDateTimeJsonSerializer.class )
public DateTime getEffectiveDate() {
    return effectiveDate;
}

С вышеуказанными настройками,@ResponseBody и Джексон Маппер, безусловно, работает. Однако мне не нравится идея, когда я продолжаю писать@JsonSerialize, Что мне нужно, это решение без@JsonSerialize на модельных объектах. Можно ли написать эту конфигурацию где-нибудь весной xml как одну конфигурацию?

Ценю твою помощь.

Ваш Ответ

5   ответов
0

@Configuration
@ComponentScan()
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter
{

    @Override
    public void configureMessageConverters(final List<HttpMessageConverter<?>> converters)
    {
        converters.add(0, jsonConverter());
    }

    @Bean
    public MappingJacksonHttpMessageConverter jsonConverter()
    {
        final MappingJacksonHttpMessageConverter converter = new MappingJacksonHttpMessageConverter();
        converter.setObjectMapper(new CustomObjectMapper());

        return converter;
    }
}
10

лучше сделать глобальную конфигурацию для вашего объекта сопоставления. Если вы используете Джексон, вы можете настроить свою пружину следующим образом:

<bean id="jacksonObjectMapper" class="com.company.CustomObjectMapper" />

<bean id="jacksonSerializationConfig" class="org.codehaus.jackson.map.SerializationConfig"
    factory-bean="jacksonObjectMapper" factory-method="getSerializationConfig" >
</bean>

Для CustomObjectMapper:

public class CustomObjectMapper extends ObjectMapper {

    public CustomObjectMapper() {
        super();
        configure(Feature.WRITE_DATES_AS_TIMESTAMPS, false);
        setDateFormat(new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss 'GMT'ZZZ (z)"));
    }
}

Конечно, SimpleDateFormat может использовать любой формат, который вам нужен.

setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssz"));Error: User Rate Limit Exceeded
1

@Moesio в значительной степени понял.

<!-- Configures the @Controller programming model -->
<mvc:annotation-driven/>

<!-- Instantiation of the Default serializer in order to configure it -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapterConfigurer" init-method="init">
    <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="My Custom ObjectMapper"/>

<bean id="jacksonSerializationConfig" class="org.codehaus.jackson.map.SerializationConfig"
    factory-bean="jacksonObjectMapper" factory-method="getSerializationConfig" />

Немного, что заставило меня<mvc:annotation-driven/> делает свой собственныйAnnotationMethodHandler и игнорирует тот, который вы делаете вручную. Я получил идею BeanPostProcessing отhttp://scottfrederick.blogspot.com/2011/03/customizing-spring-3-mvcannotation.html настроить тот, который привыкнет, и вуаля & # xE0 ;! Работает как шарм.

0

spring:
    jackson:
       date-format: yyyy-MM-dd
       time-zone: Asia/Shanghai
       joda-date-time-format: yyyy-MM-dd
-3

и верните@ResponseBodySpring автоматически преобразует объект Model в JSON. Вам не нужно ничего комментировать в модели, чтобы это работало.

Error: User Rate Limit Exceededjira.springsource.org/browse/SPR-6731Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Firdous Amir
Error: User Rate Limit Exceeded Firdous Amir

Похожие вопросы