2015-10-13 142 views
1

这有点令人沮丧......我之前在以前的项目中工作过,但在调试几个小时之后无法在我的新项目中工作。获取Spring MVC与JodaModule一起工作

假设我有一个简单的REST控制器返回乔达的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被加载。

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

enter image description here

如何配置Spring MVC以JSON返回正确的日期格式?

非常感谢。

回答

1

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

+0

我的天啊....你是绝对正确的,不知何故,我甚至没有注意到这一点。谢谢。 – limc