0

クライアントによって設定された HTTP Accept-Type ヘッダーを介して要求された形式でデータを返すように、コントローラーを設定しました。

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="messageConverters">
        <list>
            <ref bean="jacksonJSONMessageConverter" />
            <ref bean="jaxbXMLConverter" />
            <ref bean="jsonpMessageConverter" />
        </list>
    </property>
</bean>

サンプル コントローラ メソッド:

@RequestMapping(value = "/test", method = RequestMethod.POST)
@ResponseBody
public TestObject executeTest()
{
    TestObject t = ...
    // not important, generating t
    return t;
}

たとえば、次のようにします: http:// someurl/test

クライアントが実際に Accept-Type を設定できる場合は、問題なく動作します。ここで、クライアントが Accept-Type ヘッダーを設定できないときに問題が発生します。たとえば、次のように、URL にサフィックスを付けることに依存します。

  • http://someurl/test.xml
  • http://someurl/test.json
  • http:// someurl/test.jsonp?callback=fn

私の課題は、これを行うためにSpringを適切に構成する方法ですか?

いくつかの提案:

および他の多くの解決策がありますが、解決策のどれも、私が必要としているものを素敵できれいな理由で満たすことができないようです. 理想的には、次のようなきれいなことをしたいと思います

@RequestMapping(value = "/test.xml", method = RequestMethod.POST)
@ResponseBody
public TestObject executeTestReturnXML()
{
    TestObject t = executeTest();

    return t; // somehow magically force Spring converter to convert it to XML
}

@RequestMapping(value = "/test.json", method = RequestMethod.POST)
@ResponseBody
public TestObject executeTestReturnJson()
{
    TestObject t = executeTest();

    return t; // somehow magically force Spring converter to convert it to JSON
}

@RequestMapping(value = "/test.jsonp", method = RequestMethod.POST)
@ResponseBody
public TestObject executeTestReturnJsonP(@RequestParam(value = "callback", required = true) String callback)
{
    TestObject t = executeTest();

    return t; // somehow magically force Spring converter to convert it to JSON-P with callback wrapper
}

提案や指示をいただければ幸いです。

4

2 に答える 2

2

Spring MVC 3.0+ContentNegotiatingViewResolverは、あなたが求める正確な機能を備えた を導入しました。

リクエスト ファイル名または Accept ヘッダーに基づいてビューを解決する ViewResolver の実装。

次のブログ投稿が参考になります: http://blog.springsource.org/2013/06/03/content-negotiation-using-views/

于 2013-08-09T15:05:46.243 に答える
0

spring 3.1 で導入された @Produces アノテーションを使用できます。実際のドキュメントhttp://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/mvc.html#mvc-ann-requestmapping-produces と Spring Jira ( https://jira.springsource.org/browse/SPR-7213 ) いくつかの背景について

于 2013-08-09T14:01:20.223 に答える