クライアントによって設定された 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を適切に構成する方法ですか?
いくつかの提案:
- 静的メソッドを使用して json を返す: Spring MVC コントローラーから JSON または View を返す
- Spring MVC で、@ ResponseBodyを使用するときに MIME タイプ ヘッダーを設定するにはどうすればよいですか
- デフォルトのビューを使用: http://blog.safaribooksonline.com/2012/03/28/spring-mvc-tip-returning-json-from-a-spring-controller/
および他の多くの解決策がありますが、解決策のどれも、私が必要としているものを素敵できれいな理由で満たすことができないようです. 理想的には、次のようなきれいなことをしたいと思います
@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
}
提案や指示をいただければ幸いです。