2012-05-02 82 views
28

Spring MVC 3.1是否兼容Jackson 2.0? Spring MVC會在類路徑中自動檢測Jackson,並且向Jackson請求帶有JSON內容類型的請求仍然有效嗎?Jackson 2.0 with Spring 3.1

+2

他們爲什麼不呢?你有沒有試過,發現它不起作用? –

+2

http://stackoverflow.com/questions/10085088/jackson-annotations-being-ignored-in-spring –

回答

21

傑克遜2的支持在Spring 3.2中添加了,也回遷到春天3.1.2(SPR-9507

+2

如果您要從1.x遷移(步驟1:更新Maven/JAR依賴關係,請訪問http://www.cowtowncoder.com/blog/archives/2012/04/),您將需要更改pom.xml entry_469.html是您需要的內置支持來鎖定) – Manav

22

基思唐納德(春源)推文以下一段時間。

對Jackson 2的Spring MVC支持;還與傑克遜的本地 「漂亮打印」功能https://gist.github.com/2423129

工作我還沒有試過在上述要點中發現的MappingJackson2HttpMessageConverter,但如果它不工作,它讓我感到吃驚。

+5

是的,它的作品,他們添加了MappingJackson2HttpMessageConverter類,而不是「老」MappingJacksonHttpMessageConverter – emas

+0

感謝爲我工作 – nilesh

2

需要明確的是,春季3.1沒有爲傑克遜2.這是在春季的原生支持3.2

+10

這是在3.1.2中添加的。 –

7

對於彈簧3.1.2和Jackson 2 -

  • 如以上概述的,自動支持JustWorks™

  • 但配置不,因爲大部分的網絡都與預Spring3/Jackson2配置機制

所以留給後人,我會列出一個黑客(散落?或者這是官方的方式)來配置Jackson轉換器。在這種特殊情況下,我在配置轉換器在ISO-8601格式返回日期:

package foo.bar.JacksonConfig; 

import com.fasterxml.jackson.databind.ObjectMapper; 
import com.fasterxml.jackson.databind.SerializationFeature; 
import org.springframework.beans.BeansException; 
import org.springframework.beans.factory.config.BeanPostProcessor; 
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; 
import org.springframework.stereotype.Component; 

@Component 
public class JacksonConfig implements BeanPostProcessor { 

    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { 
     return bean; 
    } 

    public Object postProcessAfterInitialization(Object bean, String beanName) 
      throws BeansException { 
     if (bean instanceof MappingJackson2HttpMessageConverter) { 
      MappingJackson2HttpMessageConverter jsonConverter = 
        (MappingJackson2HttpMessageConverter) bean; 
      ObjectMapper objectMapper = jsonConverter.getObjectMapper(); 
      objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); 
      jsonConverter.setObjectMapper(objectMapper); 
     } 
     return bean; 
    } 
} 
+0

我敢肯定,這不是官方的方式,但它非常聰明! –

+2

這裏描述了「官方」配置方法:http://wallsofchange.wordpress。COM/2013/02/02 /彈簧MVC-REST的服務力 - 傑克遜對序列化,日期,如異-8601-日期/。 Jackson 2的唯一區別是你必須使用'MappingJackson2HttpMessageConverter'而不是'MappingJacksonHttpMessageConverter'和'SerializationFeature.WRITE_DATES_AS_TIMESTAMPS'而不是'SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS'。 –

+0

@Ryan這個作品很棒 – oers

17

由於春季3.1.2你只需要傑克遜,數據綁定 jar添加到類路徑。

在Maven中,你可以這樣配置它:

<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-databind</artifactId> 
    <version>${jackson.version}</version> 
</dependency> 
<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-core</artifactId> 
    <version>${jackson.version}</version> 
</dependency> 

神奇的其餘部分將通過彈簧自動完成。

請參見:http://norrisshelton.wordpress.com/2012/07/15/spring-3-mvc-with-json-via-jackson-2-0/

+0

男人,我發瘋了,直到我找到了這個。真的感謝! –

0

我沒有測試Spring MVC的3.1與2.0傑克遜兼容。但是我遇到3.0.5兼容問題。最後我發現Spring MVC 3.0.5只與Jackson 1.0.0兼容,肯定Jackson 1.5.3不兼容!