代码之家  ›  专栏  ›  技术社区  ›  Michael user5835524

Spring Rest JSON日期格式

  •  1
  • Michael user5835524  · 技术社区  · 9 年前

    我知道,这里有很多来自Spring MVC的客户端JSON日期格式的例子,但在我的例子中,除了一个使用复合合同的特定案例之外,一切都很好。

    问题是,在客户端,JSON响应端 curObj 日期 currencyOpenedDate 收到 字符串格式 ,同时 depObj.subdivisionClosedDate 日期以时间戳格式指定。 您可以在问题底部找到的回答屏幕。

    curObj.currencyOpenedDate 时间戳格式?

    <context:component-scan base-package="ru.iteco.kursval.server.rest"/>
    <context:annotation-config/>
    <!-- Configures the @Controller programming model -->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <property name="messageConverters">
            <list>
                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
            </list>
        </property>
    </bean>
    <!-- Total customization - see below for explanation. -->
    <bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
        <property name="favorPathExtension" value="false"/>
        <property name="favorParameter" value="true"/>
        <property name="parameterName" value="mediaType"/>
        <property name="ignoreAcceptHeader" value="true"/>
        <property name="useJaf" value="false"/>
        <property name="defaultContentType" value="application/json"/>
    
        <property name="mediaTypes">
            <map>
                <entry key="json" value="application/json"/>
                <entry key="xml" value="application/xml"/>
            </map>
        </property>
    </bean>
    
    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean:bean class="ru.iteco.kursval.server.rest.config.ApiInterceptor" autowire="constructor">
            </bean:bean>
        </mvc:interceptor>
    </mvc:interceptors>
    
    <!-- Make this available across all of Spring MVC -->
    <mvc:annotation-driven content-negotiation-manager="contentNegotiationManager"/>
    

    混合成的

    public class RegionalBankBlockCurrencyDto implements Serializable {
        //.....
        private Long curId;
        /*----> here */ private CurrencyDto curObj;
        private Long depId;
        private SubdivisionDto depObj;
    
        // .... getters and setters
    
    }
    

    货币对象

    public class CurrencyDto implements Serializable {
    
        private Date currencyOpenedDate;
        private Date currencyClosedDate;
    
        public Date getCurrencyOpenedDate() {
            return currencyOpenedDate;
        }
    
        public void setCurrencyOpenedDate(Date currencyOpenedDate) {
            this.currencyOpenedDate = currencyOpenedDate;
        }
    
        public Date getCurrencyClosedDate() {
            return currencyClosedDate;
        }
    
        public void setCurrencyClosedDate(Date currencyClosedDate) {
            this.currencyClosedDate = currencyClosedDate;
        }
    
    }
    

    货币和细分DTO非常简单,没有任何注释和日期属性。这两种情况下的初始化如下:

        Date openDate = null;
    
        if (currency.getOpenDate() != null) {
            openDate = new Date(currency.getOpenDate().getTime());
        }
    

    服务器端实例

    enter image description here

    JSON响应

    enter image description here

    1 回复  |  直到 9 年前
        1
  •  2
  •   shazin    9 年前

    按如下方式配置对象映射器;

    @Autowired
    private ObjectMapper objectMapper;
    
    objectMapper.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, true);