2010-11-18 28 views
5

Hỗ trợ JSON được thêm vào dispatch-servlet.xml (XML đang hoạt động mà không gặp vấn đề gì)?
văn bản nhận xét đã được chỉ thất bại nỗ lực ...Làm cách nào để thêm hỗ trợ JSON bằng XML đã hoạt động?

<?xml version="1.0" encoding="UTF-8"?> 
<beans:beans xmlns="http://www.springframework.org/schema/mvc" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:beans="http://www.springframework.org/schema/beans" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:oxm="http://www.springframework.org/schema/oxm" 
    xsi:schemaLocation=" 
     http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 
     http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm-3.0.xsd"> 


    <context:annotation-config/> 
    <context:component-scan base-package="com.example"/> 

    <oxm:jaxb2-marshaller id="marshaller" contextPath="com.example.domain"/> 

    <beans:bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 
     <beans:property name="messageConverters"> 
      <beans:list> 
       <beans:bean class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter"> 
        <beans:constructor-arg ref="marshaller"/> 
       </beans:bean> 
<!--    <beans:bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> 
       <beans:constructor-arg ref="marshaller"/> 
       </beans:bean> --> 
      </beans:list> 
     </beans:property> 
    </beans:bean> 

    <beans:bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/> 

    <beans:bean name="note" class="org.springframework.web.servlet.view.xml.MarshallingView"> 
     <beans:constructor-arg ref="marshaller"/> 
    </beans:bean> 
<!-- <beans:bean name="note" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"> 
    <beans:constructor-arg ref="marshaller"/> 
</beans:bean> --> 

    <!-- InternalResourceViewResolver should be the last sice it always returns/resolves a view --> 
    <beans:bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <beans:property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></beans:property> 
     <beans:property name="prefix" value="/WEB-INF/jsp/"></beans:property> 
     <beans:property name="suffix" value=".jsp"></beans:property> 
    </beans:bean> 

</beans:beans> 

giải pháp bổ sung để: method=RequestMethod.POST, headers = "content-type=application/json"
Bạn vẫn cần:

<beans:bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter> 
    <beans:property name="messageConverters"> 
     <beans:list> 
      <beans:bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" /> 
     </beans:list> 
    </beans:property> 
</beans:bean> 

Để ràng buộc một cách chính xác đối tượng java cho @RequestBody.

+6

Wow, có chuyện gì với số phiếu xuống? Ít nhất để lại cho tôi một số con trỏ ... – Solata

+3

Không phải là một kẻ phá hủy, nhưng tôi sẽ tưởng tượng nó không phải là cho chúng tôi biết làm thế nào * thất bại thất bại và những gì các lỗi đã được :) – Affe

+0

Ok, tôi đồng ý, tôi có thể đi nhiều hơn chi tiết ... Câu trả lời của AHungerArtist giúp :) – Solata

Trả lời

5

Hãy thử một cái gì đó như thế này:

<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> 
     <property name="objectMapper"> 
      <ref bean="JacksonObjectMapper" /> 
     </property> 
</bean> 

<bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"> 
    <property name="objectMapper"> 
     <ref bean="JacksonObjectMapper" /> 
    </property> 
</bean> 

<bean id="JacksonObjectMapper" class="org.codehaus.jackson.map.ObjectMapper" /> 

Nó không có ý nghĩa mà bạn sẽ sử dụng marshaller JAXB để nhanh chóng Jackson (Tôi không nghĩ).

Một ví dụ của việc sử dụng ContentNegotiatingViewResolver:

<bean 
    class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> 
    <property name="mediaTypes"> 
     <map> 
      <entry key="json" value="application/json" /> 
      <entry key="xml" value="application/xml" /> 
     </map> 
    </property> 
    <property name="defaultViews"> 
     <list> 
      <bean 
       class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"> 
       <property name="objectMapper"> 
        <ref bean="JacksonObjectMapper" /> 
       </property> 
      </bean> 
      <bean class="org.springframework.web.servlet.view.xml.MarshallingView"> 
       <property name="marshaller"> 
        <ref bean="Jaxb2Marshaller" /> 
       </property> 
      </bean> 
     </list> 
    </property> 
    <property name="favorPathExtension" value="false" /> 
    <property name="favorParameter" value="true" /> 
    <property name="useNotAcceptableStatusCode" value="true" /> 
</bean> 
+0

Bạn đã hiểu, nhưng hoạt động nếu tôi để nguyên hạt XML ra. Bạn có thể tư vấn làm thế nào để sử dụng điều này kết hợp với XML và với cùng một " Solata

+0

Bạn đang làm việc với phiên bản Spring nào? Và bạn đang sử dụng ghi chú ở đâu? – AHungerArtist

+0

Nếu bạn có thể sử dụng ContentNegotiatingViewResolver, có vẻ như điều đó sẽ khá dễ dàng để bật và sử dụng. – AHungerArtist

0

tôi tìm thấy trên đây mà bạn có thể cần phải cập nhật các phiên bản của jar jackson-asl bạn http://forum.springsource.org/showthread.php?t=83954

Hãy thử nhìn vào đó và xem nếu nâng cấp nó sửa chữa vấn đề.

+0

Nếu đây là Glassfish chỉ ... Tôi sử dụng Jetty và cũng đã thử thêm jackson-all-1.6.2.jar với cùng một lỗi. AHungerArtist hiểu rồi. – Solata

+0

Gotcha, cảm ơn bạn đã cập nhật bài đăng của mình để tôi có thể thấy câu trả lời :-) – wajiw

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