如何返回基于URI球衣REST Web服务多种格式
例如正确表示
/text.json应该返回JSON
/text.xml应该返回XML
/文本应该返回纯文本
所有这些都映射到相同的方法
@GET 公众联系getContacts(){
}
如何返回基于URI球衣REST Web服务多种格式
例如正确表示
/text.json应该返回JSON
/text.xml应该返回XML
/文本应该返回纯文本
所有这些都映射到相同的方法
@GET 公众联系getContacts(){
}
答案可以在这个帖子中找到: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>
....
如果你正在创建webservice而不是面向面向用户的服务,您可能需要考虑内容类型协商(JAX-RS中的@Produces注释)。这会给你留下单一的uri/text,并且内容类型将在请求头文件中声明(这是更多的RESTful aproach)。 – Jonas 2013-12-13 07:29:24