2017-06-08 22 views
0

Spring MVCのジャクソンメッセージコンバータの日付形式が動作していない、常に長いタイムスタンプを返し

Jackson Object Mapper in spring MVC not working

why is the Object Mapper date fromat not used by message converters for date transform?

が、どれも私のためのソリューションです。

春MVCのXML:

<mvc:annotation-driven> 
    <mvc:message-converters register-defaults="false"> 
     <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> 
      <property name="objectMapper"> 
      <bean class="com.xxx.model.MyJacksonObjectMapper"> 

      </bean> 
      </property> 
     </bean> 
    </mvc:message-converters> 
</mvc:annotation-driven> 

MyJacksonObjectMapper:私はそれはまだ動作していない、trueまたはfalseにregister-defaultsを変更する問題ではありませ

public class MyJacksonObjectMapper extends ObjectMapper { 

    private static final long serialVersionUID = -3282890427623599460L; 

    public MyJacksonObjectMapper() { 
     super(); 
     disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); 
     setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));   
    } 

} 

、私のコントローラは常に、タイムスタンプで、オブジェクトの日付の値をシリアル化(長い)形式です。

私のPOJOオブジェクトには注釈が付加されていません。POJOであり、注釈(私のクラスではない)で注釈を付けることはできません。デフォルトのオブジェクトの日付を希望の形式でシリアル化できるようにする必要があります。働いていない、助けてください。

依存関係:私はなぜ知らないが

<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-databind</artifactId> 
    <version>2.7.3</version> 
</dependency> 
<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-core</artifactId> 
    <version>2.7.3</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-webmvc</artifactId> 
    <version>4.2.5.RELEASE</version> 
</dependency> 

答えて

0

OKこの回答https://stackoverflow.com/a/7714503/1542363は、間接的に、私を救いました。

それは、これを削除する必要があります述べた:私の問題は、これに似ている

<mvc:annotation-driven/> 

、私は春のconfig XMLに注釈ブロックを複製しています

ので、私から私の設定を変更します。

<mvc:annotation-driven> 
    <mvc:argument-resolvers> 
    <bean class="org.springframework.security.web.method.annotation.AuthenticationPrincipalArgumentResolver" /> 
    </mvc:argument-resolvers> 
</mvc:annotation-driven> 

<mvc:annotation-driven> 
    <mvc:message-converters register-defaults="false"> 
     <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> 
      <property name="objectMapper"> 
      <bean class="com.xxx.model.MyJacksonObjectMapper"> 

      </bean> 
      </property> 
     </bean> 
    </mvc:message-converters> 
</mvc:annotation-driven> 

〜:

<mvc:annotation-driven> 
    <mvc:argument-resolvers> 
     <bean class="org.springframework.security.web.method.annotation.AuthenticationPrincipalArgumentResolver" /> 
    </mvc:argument-resolvers> 
    <mvc:message-converters register-defaults="false"> 
     <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> 
      <property name="objectMapper"> 
      <bean class="com.xxx.model.MyJacksonObjectMapper"></bean> 
      </property> 
     </bean> 
    </mvc:message-converters> 
</mvc:annotation-driven> 

それは何の理由があるかわからない場合は、動作します。

1

はたぶん、あなたはあなたのxmlの設定ファイル内の2つのラベルを持っている、とのような:

<mvc:message-converters register-defaults="false"> 
    <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> 
     <property name="objectMapper"> 
     <bean class="com.xxx.model.MyJacksonObjectMapper"> 

     </bean> 
     </property> 
    </bean> 
</mvc:message-converters> 

..... ..... .....

<mvc:annotation-driven/> 

最後のラベルが最初のラベルを上書きするので、MyJacksonObjectMapperクラスは有効にならないと思います。

1

私は同じ問題がありましたが、カスタムオブジェクトマッパーを書こうとしませんでした。私はカスタムマッパーを書かずにこれを設定する方法を示したwww.armedia.comのポストを見つけました。 Spring 4.3.14とJackson 2.9.2を使用すると、以下のxml configが動作します。 SpringとJacksonの以前のバージョンではうまくいくはずです。 https://www.armedia.com/blog/spring-mvc-setting-json-date-format-2/

<!-- set JSON date format to ISO-8601 e.g. 1970-01-01T00:00:00.000+0000 --> 
<bean id="sourceObjectMapper" class="com.fasterxml.jackson.databind.ObjectMapper" /> 
<bean id="acmObjectMapper" 
    class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> 
    <property name="targetObject" ref="sourceObjectMapper" /> 
    <property name="targetMethod" value="disable" /> 
    <property name="arguments" value="WRITE_DATES_AS_TIMESTAMPS" /> 
</bean> 
<bean id="acmJacksonConverter" 
    class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> 
    <property name="objectMapper" ref="acmObjectMapper" /> 
</bean> 

<!-- We configure the Jackson mapper to output dates in ISO801 format. This requires adding 
    our customized Jackson mapper to the list of Spring MVC message converters. But, if 
    we just add our bean here all by itself, it will handle requests it should not handle, 
    e.g. encoding strings. So we need to add the other standard message converters here 
    too, and make sure to put the customized Jackson converter AFTER the string converter. 
--> 
<mvc:annotation-driven> 
    <mvc:message-converters> 
     <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/> 
     <bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"/> 
     <bean class="org.springframework.http.converter.StringHttpMessageConverter"/> 
     <bean class="org.springframework.http.converter.ResourceHttpMessageConverter"/> 
     <bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter"/> 
     <ref bean="acmJacksonConverter"/> 
     <bean class="org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter"/> 
     <bean class="org.springframework.http.converter.BufferedImageHttpMessageConverter"/> 
     <bean class="org.springframework.http.converter.FormHttpMessageConverter"/> 
     <bean class="org.springframework.http.converter.xml.Jaxb2CollectionHttpMessageConverter"/> 
    </mvc:message-converters> 
</mvc:annotation-driven> 

すべてのクレジットはでdmillerに行くべき

関連する問題