2012-04-19 14 views
1

ありがとうございました。Spring設定 - mvc:アノテーション駆動、AnnotationMethodHandlerAdapter、およびJSON

JSONを返すコントローラメソッドを取得しようとしています。

@RequestMapping(value="/myReqPath", method=RequestMethod.GET) 
@ResponseBody 
public Map<String, String> myJsonMethod() { 

    Map<String, String> response = new TreeMap<String, String>(); 
    response.put("test", "test"); 

    return response; 

} 

それは私が<mvc:annotation-driven/>は、これを達成するために、私のサーブレットコンテキストに追加必要私の理解です:簡単なテストをオフに開始。問題は、それを追加すると、私のカスタムAnnotationMethodHandlerAdapterが破損することです。 ?

<!--Skipping this for now... 
<mvc:annotation-driven/> 
--> 

<!-- JSON Marshaling --> 
<util:constant id="jsonBasicClassIntrospector" 
    static-field="org.codehaus.jackson.map.introspect.BasicClassIntrospector.instance" /> 
<bean id="jsonJaxbAnnotationIntrospector" 
    class="org.codehaus.jackson.xc.JaxbAnnotationIntrospector" /> 
<bean id="jsonVisibilityChecker" 
    class="org.codehaus.jackson.map.introspect.VisibilityChecker.Std" 
    factory-method="defaultInstance" /> 
<bean id="jsonDefaultTypeFactory" 
    class="org.codehaus.jackson.map.type.TypeFactory" 
    factory-method="defaultInstance" /> 
<bean id="jsonObjectMapper" class="org.codehaus.jackson.map.ObjectMapper"> 
    <property name="serializationConfig"> 
     <bean class="org.codehaus.jackson.map.SerializationConfig"> 
      <constructor-arg ref="jsonBasicClassIntrospector" /> 
      <constructor-arg ref="jsonJaxbAnnotationIntrospector" /> 
      <constructor-arg ref="jsonVisibilityChecker" /> 
      <constructor-arg><null/></constructor-arg> 
      <constructor-arg><null/></constructor-arg> 
      <constructor-arg ref="jsonDefaultTypeFactory" /> 
      <constructor-arg><null/></constructor-arg> 
     </bean> 
    </property> 
    <property name="deserializationConfig"> 
     <bean class="org.codehaus.jackson.map.DeserializationConfig"> 
      <constructor-arg ref="jsonBasicClassIntrospector" /> 
      <constructor-arg ref="jsonJaxbAnnotationIntrospector" /> 
      <constructor-arg ref="jsonVisibilityChecker" /> 
      <constructor-arg><null/></constructor-arg> 
      <constructor-arg><null/></constructor-arg> 
      <constructor-arg ref="jsonDefaultTypeFactory" /> 
      <constructor-arg><null/></constructor-arg> 
     </bean> 
    </property> 
</bean> 

... 

<!-- My custom AnnotationMethodHandlerAdapter... --> 
<bean id="sessionArgResolver" class="com.SessionParamArgumentResolver"/> 
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 
    <property name="customArgumentResolver" ref="sessionArgResolver"/> 
</bean> 

:ここ

[B]私が抽出し、コントローラーからJSONを返すために<mvc:annotation-driven/>の必要な部品を追加するにはどうすればよい[/ B]

は私のサーブレットの設定の関連部分ですそのままで、コントローラのメソッドが呼び出されますが、ブラウザはhttpステータス406を返します。 406受け入れられません - [url] http:// localhost:8080/myApp/myReqPath [/ url]

答えて

2

カスタムAnnotationMethodHandlerAdapter decあなたはそれにHttpMessageConverterのリストを追加することができます:

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 
    <property name="customArgumentResolver" ref="sessionArgResolver"/> 
    <property name = "messageConverters"> 
     <list> 
      <bean 
       class = "org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> 
       <property name = "objectMapper" ref = "jsonObjectMapper" /> 
      </bean> 
     </list> 
    </property> 
</bean> 
関連する問題