2011-03-10 87 views
2

我正在使用mvc:annotation-driven,這意味着只需將傑克遜jar文件放置到配置了Jackson json marhsaller的類路徑中即可。現在我想提供一個自定義對象映射器,以便能夠控制全局級別的Date字段的序列化。爲spring3 mvc項目定義一個自定義傑克遜對象映射器

我開始定義AnnotationMethodHandlerAdapter上並引用我自己jsonConverter豆(見下文)

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 
    <property name="messageConverters"> 
     <list> 
      <ref bean="jsonConverter" /> 
      <ref bean="xmlMarshallingConverter" /> 
     </list> 
    </property> 
</bean> 

的問題是日期仍然寫成時間戳。自定義的objectmapper bean被創建(獲取日誌),但它永遠不會使用objectmapper。我假設它仍然使用默認的MappingJacksonHttpMessageConverter和默認的ObjectMapper。

任何想法?我將如何弄清楚要覆蓋哪些確切的bean來改變默認的映射器?

Thanx!

+0

您是否在使用'@ ResponseBody'? – skaffman 2011-03-10 13:40:49

回答

0

您是否配置了視圖解析器以使用您的自定義對象映射器實例(請參閱下面對jacksonObjectMapper的參考)?

我的理解是AnnotationMethodHandlerAdapter處理入站轉換,ContentNegotiatingViewResolver處理出站轉換。

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> 
    <property name="mediaTypes"> 
     <map> 
      <entry key="json" value="application/json"/> 
      <!-- xml etc --> 
     </map> 
    </property> 
    <property name="defaultViews"> 
     <list> 
      <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"> 
       <property name="objectMapper" ref="jacksonObjectMapper"/> 
      </bean> 
      <!-- xml etc --> 
     </list> 
    </property> 
</bean> 
+0

我想通過使用@ResponseBody註釋將使用HttpMessageConverters,而不是視圖解析器。 – 2011-03-14 09:50:21

+0

一秒鐘:這是否意味着ContentNegotiatingViewResolver自動設置?我沒有詳細說明。我只是使用普通的 2011-03-14 10:24:35