2010-10-21 101 views
1

如何返回基於URI球衣REST Web服務多種格式

例如正確表示

/text.json應該返回JSON

/text.xml應該返回XML

/文本應該返回純文本

所有這些都映射到相同的方法

@GET 公衆聯繫getContacts(){

}

+0

如果你正在創建webservice而不是面向面向用戶的服務,您可能需要考慮內容類型協商(JAX-RS中的@Produces註釋)。這會給你留下單一的uri/text,並且內容類型將在請求頭文件中聲明(這是更多的RESTful aproach)。 – Jonas 2013-12-13 07:29:24

回答

3

答案可以在這個帖子中找到:http://jersey.576304.n2.nabble.com/extension-custom-negotiation-td3078866.html

基本上你配置ResourceConfig https://jersey.dev.java.net/nonav/apidocs/1.1.0-ea/jersey/com/sun/jersey/api/core/ResourceConfig.html

你需要擴展一個實施ResourceConfig [1]並覆蓋媒體類型映射方法。

例如,你可以做到以下幾點:

package foo; 

public class MyResourceConfig extends PackagesResourceConfig { 
    public PackagesResourceConfig(Map<String, Object> props) { 
     super(props); 
    } 

    public Map<String, MediaType> getMediaTypeMappings() { 
     Map<String, MediaType> m = new HashMap<String, MediaType>(); 
     m.put("json", MediaType.APPLICATION_JSON_TYPE); 
     m.put("xml", MediaType.APPLICATION_XML_TYPE); 
     return m; 
    } 
} 

,您可以在此描述註冊您的 「MyResourceConfig」:

https://jersey.dev.java.net/documentation/1.1.0-ea/user-guide.html#d4e115

在上面的例子中你的web.xml需要到容器:

<web-app> 
    <servlet> 
     <servlet-name>Jersey Web Application</servlet-name> 
     <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>javax.ws.rs.Application</param-name> 
      <param-value>foo.MyResourceConfig</param-value> 
     </init-param> 
     <init-param> 
      <param-name>com.sun.jersey.config.property.packages</param-name> 
      <param-value>org.foo.rest;org.bar.rest</param-value> 
     </init-param> 
    </servlet> 
    .... 
相關問題