json - Spring 3.2RC1 中来自 JodaTime 的 jackson2 JSON ISO 8601 日期

标签 json spring spring-mvc jackson jodatime

我正在使用 Spring MVC 3.2RC1 中的 REST API。

我正在获取一个带有 org.joda.time.DateTime 时间戳的 JPA 实体,并让 Spring 使用

将其序列化为 JSON
@RequestMapping(value = "/foobar", method = RequestMethod.GET, produces = "application/json")
@ResponseBody

在 Spring 中使用默认的 Jackson2 设置,因为我只添加了

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.1.1</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.1.1</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.1.1</version>
</dependency>

到我的 POM 并让 Spring 自行连接。

Controller 正在生成:

"created":{"year":2012,"dayOfMonth":30,"dayOfWeek":5,"era":1,"dayOfYear":335,"weekOfWeekyear":48,"weekyear":2012,"monthOfYear":11,"yearOfEra":2012,"yearOfCentury":12,"centuryOfEra":20,"millisOfSecond":39,"millisOfDay":52684039,"secondOfMinute":4,"secondOfDay":52684,"minuteOfHour":38,"minuteOfDay":878,"hourOfDay":14,"millis":1354282684039,"zone":{"uncachedZone":{"cachable":true,"fixed":false,"id":"Europe/Stockholm"},"fixed":false,"id":"Europe/Stockholm"},"chronology":{"zone":{"uncachedZone":{"cachable":true,"fixed":false,"id":"Europe/Stockholm"},"fixed":false,"id":"Europe/Stockholm"}},"afterNow":false,"beforeNow":true,"equalNow":false}

但我希望它是 ISO8601 日期,例如 2007-11-16T20:14:06.3Z(或带有偏移量)。

我的猜测是我需要访问 ObjectMapper 并设置 mapper.enable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);但是在使用时如何访问 ObjectMapper

<mvc:annotation-driven />

附:我使用 UserType 使用 JPA/Hibernate4 将对象持久化到 PostgreSQL 以获得 JodaTime 支持。 D.S.

更新

下面的配置解决了 java.util.Date 的问题,但 JodaTime 仍然没有骰子。

<annotation-driven>
    <message-converters>
        <beans:bean
            class="org.springframework.http.converter.StringHttpMessageConverter" />
        <beans:bean
            class="org.springframework.http.converter.ResourceHttpMessageConverter" />
        <beans:bean
            class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
            <beans:property name="objectMapper">
                <beans:bean
                    class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"
                    p:indentOutput="true" p:simpleDateFormat="yyyy-MM-dd'T'HH:mm:ss.SSSZ">
                </beans:bean>
            </beans:property>
        </beans:bean>
    </message-converters>
</annotation-driven>

最佳答案

或者,如果您更喜欢在 Java 中进行配置,它可能如下所示:

@Configuration
@EnableWebMvc
public class RestConfig extends WebMvcConfigurerAdapter {

    private ObjectMapper objectMapper() {
        Jackson2ObjectMapperFactoryBean bean = new Jackson2ObjectMapperFactoryBean();
        bean.setIndentOutput(true);
        bean.setSimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
        bean.afterPropertiesSet();
        ObjectMapper objectMapper = bean.getObject();
        objectMapper.registerModule(new JodaModule());
        return objectMapper;
    }

    private MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        converter.setObjectMapper(objectMapper());
        return converter;
    }

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(mappingJackson2HttpMessageConverter());
    }

}

关于json - Spring 3.2RC1 中来自 JodaTime 的 jackson2 JSON ISO 8601 日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13700853/

相关文章:

javascript - 如何将 Replacer 函数与 JSON Stringify 结合使用?

java - 有人可以解释 Spring Security BasePermission.Create 吗?

java - @scheduled 为 cron 表达式抛出异常

python - 如何从 python 插入和检索存储在 REDIS 中的 json?

json - 使用 JSON API 查找 DBpedia gloss

json - 成功调用 URL 后,Spring RESTful Web 服务返回 404

java - Spring Mail Integration - 我如何将 org.springframework.messaging.Message 转换为 javax.mail.internet.MimeMessage

java - Spring 安全更新 2.x 到 3.2.5 SecurityContextHolder 问题

java - 什么样的对象应该在ioc下

java - Java 中的 Rails 闪存消息