2010-11-18 9 views
5

JSONサポートをdispatch-servlet.xmlに追加する方法(XMLは問題なく動作します)
コメントテキストだけのために、...XMLを使用してJSONサポートを追加するにはどうすればよいですか?

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

追加のソリューションを試みに失敗しました:method=RequestMethod.POST, headers = "content-type=application/json"
は、あなたはまだ必要があります。

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

は正しく@RequestBodyのJavaオブジェクトをバインドするには。

+6

うわー、ダウン票とは何ですか?少なくとも私にいくつかのポインタを残してください... – Solata

+3

downvoterではありませんでしたが、失敗した試行が失敗し、どのようなエラーが発生したかを教えてくれたとは思いませんでした:) – Affe

+0

詳細... AHungerArtistの答えが役に立ちます:) – Solata

答えて

5

はこのような何かを試してみてください:

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

それはあなたがジャクソン(私は考えていない)インスタンス化するために、JAXBのマーシャラーを使用する意味がありません。

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

あなたはそれを持っていますが、XML beanを残しておけばうまくいきます。 BeanNameViewResolverのXMLと組み合わせて、同じ " Solata

+0

あなたはどのバージョンのSpringを使用していますか?そして、どのようにノートを使用していますか? – AHungerArtist

+0

ContentNegotiatingViewResolverを使用することができれば、それはポップインして使用するのがかなり簡単なようです。 – AHungerArtist

0

私はあなたがそれを見て試してみて、それをアップグレードしても問題が修正された場合に表示さあなたのジャクソン・ASLジャーhttp://forum.springsource.org/showthread.php?t=83954

のバージョンを更新する必要があるかもしれないことをここに発見しました。

+0

これがGlassfishの場合のみ...私はJettyを使用し、同じエラーでjackson-all-1.6.2.jarを追加しようとしました。 AHungerArtistはそれを手に入れました。 – Solata

+0

Gotcha、私の回答を見ることができるので、私のポストを更新してくれてありがとう:-) – wajiw

関連する問題