2012-05-02 37 views
28

Spring MVC 3.1 có tương thích với Jackson 2.0 không? Việc phát hiện tự động Jackson MVC của Spring MVC trên đường dẫn lớp và việc ủy ​​quyền cho Jackson đối với các yêu cầu với một kiểu nội dung JSON vẫn hoạt động?Jackson 2.0 với Spring 3.1

+2

Tại sao họ không? Bạn đã thử và quan sát thấy nó không hoạt động? –

+2

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

Trả lời

21

Hỗ trợ cho Jackson 2 đã được thêm vào mùa xuân 3.2, và cũng đã backported để mùa xuân 3.1.2 (SPR-9507)

+2

Bạn sẽ cần thay đổi tệp pom.xml nếu bạn di chuyển từ 1.x ('Bước 1: Cập nhật phụ thuộc Maven/JAR' từ http://www.cowtowncoder.com/blog/archives/2012/04/ entry_469.html là tất cả những gì bạn cần cho sự hỗ trợ dựng sẵn để chốt lại) – Manav

22

Keith Donald (nguồn gốc lò xo) đã tweet lại một lúc sau.

Hỗ trợ MVC mùa xuân cho Jackson 2; cũng làm việc với Jackson mẹ đẻ "in khá" tính năng https://gist.github.com/2423129

Tôi đã không cố gắng MappingJackson2HttpMessageConverter tìm thấy trong các ý chính trên nhưng nó sẽ ngạc nhiên nếu nó không làm việc.

+5

Có nó hoạt động, họ đã thêm lớp MappingJackson2HttpMessageConverter có nghĩa là được sử dụng thay cho "cũ" MappingJacksonHttpMessageConverter – emas

+0

Cảm ơn đã làm việc cho tôi – nilesh

2

Để được rõ ràng, Spring 3.1 không có hỗ trợ bản địa cho Jackson 2. Đó là trong mùa xuân 3,2

+10

Điều này đã được thêm vào trong 3.1.2. –

7

Đối với mùa xuân 3.1.2 và Jackson 2 -

  • Như đã nêu ở trên, JustWorks hỗ trợ tự động ™

  • nhưng cấu hình thì không, vì hầu hết các trang web đều có sẵn các cấu hình cấu hình trước Spring3/Jackson2

Vì vậy, với hậu thế, tôi sẽ liệt kê một hack (? hoặc đây là cách chính thức) để định cấu hình trình chuyển đổi Jackson. Trong trường hợp đặc biệt này, tôi đang cấu hình bộ chuyển đổi để trở lại ngày tháng trong định dạng 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

Tôi chắc chắn rằng đây không phải là cách chính thức nhưng nó rất thông minh! –

+2

Phương thức cấu hình chính thức "chính thức" được mô tả ở đây: http: //wallsofchange.wordpress.com/2013/02/02/spring-mvc-nghỉ-dịch vụ-lực-jackson-to-serialize-ngày-as-iso-8601-ngày /. Sự khác biệt duy nhất cho Jackson 2 là bạn phải sử dụng 'MappingJackson2HttpMessageConverter' thay vì' MappingJacksonHttpMessageConverter' và 'SerializationFeature.WRITE_DATES_AS_TIMESTAMPS' thay vì' SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS'. –

+0

@ Ryan công trình này tuyệt vời – oers

17

Kể từ mùa xuân 3.1.2 bạn chỉ cần có để thêm jackson-DataBind jar vào classpath của bạn.

Trong Maven bạn có thể cấu hình nó như thế này:

<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> 

Phần còn lại của sự kỳ diệu sẽ được thực hiện vào mùa xuân tự động.

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

+0

Man, tôi đã phát điên cho đến khi tôi tìm thấy điều này. Rất cảm ơn! –

0

Tôi không kiểm tra Spring MVC 3.1 tương thích với Jackson 2.0. Nhưng tôi gặp phải vấn đề tương thích 3.0.5. Cuối cùng tôi thấy Spring MVC 3.0.5 chỉ tương thích với Jackson 1.0.0, chắc chắn Jackson 1.5.3 không tương thích !!!

Các vấn đề liên quan