让 Spring MVC 与 JodaModule 一起工作

Getting Spring MVC to work with JodaModule

这有点令人沮丧......我以前的项目中有这个工作,但在调试了几个小时后无法在我的新项目中工作。

假设我有一个简单的 Rest 控制器 returns Joda 的 LocalDate:-

@RestController
@RequestMapping(value = "/api")
public final class ApiController {
    @RequestMapping(method = RequestMethod.GET)
    public ResponseEntity<LocalDate> main() {
        return new ResponseEntity<LocalDate>(LocalDate.now(), HttpStatus.OK);
    }
}

默认情况下,当我调用 http://app/api 时,我得到 [2015,10,13]。我真正想要的是 2015-10-13.

为了在我之前的项目中解决这个问题,我在 spring-servlet.xml 中使用了这个配置:-

<?xml version="1.0" encoding="UTF-8"?>
<beans ...>

    <context:component-scan base-package="test.controller"/>

    <mvc:annotation-driven/>

    <mvc:resources location="/resources/" mapping="/resources/**"/>

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

    <bean id="objectMapper"
          class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"
          p:indentOutput="true"
          p:simpleDateFormat="yyyy-MM-dd'T'HH:mm:ss.SSSZ">
    </bean>

    <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"
          p:targetObject-ref="objectMapper"
          p:targetMethod="registerModule">
        <property name="arguments">
            <list>
                <bean class="com.fasterxml.jackson.datatype.joda.JodaModule"/>
            </list>
        </property>
    </bean>

    <mvc:annotation-driven>
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="objectMapper" ref="objectMapper"/>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>
</beans>

但是,当我在我的新项目中做同样的事情时,我再次得到 [2015,10,13] 而不是 2015-10-13

我确实升级了一些依赖项,我还确保没有加载额外的 ObjectMapper

这是我当前的依赖关系树...我删除了所有不需要的东西:-

如何将 Spring MVC 配置为 return JSON 中的正确日期格式?

非常感谢。

您声明了 <mvc:annotation-driven> 两次。尝试删除第一个声明(空的默认配置)。可能您在第二个 <mvc:annotation-driven> 中配置的消息转换器被第一个声明(使用默认消息转换器)覆盖。