我想創建一個可以返回JSON或XML的REST服務。我在請求中設置了什麼請求參數來請求某種MIME類型?我知道如何在響應中設置它,但必須有辦法請求某個特定的響應。目前,我這樣做是在URL具有相同REST GET的多個響應類型?
restServlet /發動機/ 2WS2345
jsonServlet /發動機/ 2WS2345
這讓我JSON或XML。但我想我讀了有一個參數在請求中設置。我正在使用JAVA ...
我想創建一個可以返回JSON或XML的REST服務。我在請求中設置了什麼請求參數來請求某種MIME類型?我知道如何在響應中設置它,但必須有辦法請求某個特定的響應。目前,我這樣做是在URL具有相同REST GET的多個響應類型?
restServlet /發動機/ 2WS2345
jsonServlet /發動機/ 2WS2345
這讓我JSON或XML。但我想我讀了有一個參數在請求中設置。我正在使用JAVA ...
如果您使用球衣,您可以使用@Produces註釋輕鬆配置方法。 @Produces({「application/xml」,「application/json」})
好東西是你仍然可以擁有一個JAXB對象作爲返回類型。它會自動更改爲所需的格式。除非在Accept Header中指定了MIME類型,否則它將始終在上述情況下發送xml。
Ref http://jersey.java.net/nonav/documentation/1.6/user-guide.html
您可以使用Restlet在代碼中使用註釋並根據用戶代理的Accept
標頭運行內容協商或在URI中指定擴展(使用Restlet的TunnelService和MetadataService)。下面是一個例子(基於的Restlet 2):
public class TestApplication extends Application {
public static class TestResource extends ServerResource {
@Get("txt")
public Representation toText() {
return new StringRepresentation("Hello!",
MediaType.TEXT_PLAIN);
}
@Get("xml")
public Representation toXml() {
return new StringRepresentation("<test>Hello</test>",
MediaType.APPLICATION_XML);
}
}
@Override
public synchronized Restlet createInboundRoot() {
getTunnelService().setEnabled(true);
getTunnelService().setExtensionsTunnel(true);
Router router = new Router();
router.attachDefault(TestResource.class);
return router;
}
public static void main(String[] args) throws Exception {
Component component = new Component();
component.getServers().add(Protocol.HTTP, 8182);
component.getDefaultHost().attachDefault(new TestApplication());
component.start();
}
}
內容協商經由Accept首部的工作原理:
curl -H "Accept: text/plain" http://localhost:8182/test
返回Hello!
curl -H "Accept: application/xml" http://localhost:8182/test
返回<test>Hello</test>
它還通過分機工作(感謝getTunnelService().setExtensionsTunnel(true)
):
curl http://localhost:8182/test.txt
回報Hello!
curl http://localhost:8182/test.xml
回報<test>Hello</test>
有一個default list of extension to media-type mapping,但是這可以通過MetadataService進行配置。
是的,謝謝。祕訣是:req.getHeader(「Accept」)。這會返回一個可以解析的字符串。下面是當我不設置它並使用瀏覽器時得到的內容:image/gif,image/jpeg,image/pjpeg,image/pjpeg,application/x-ms-application,application/x-ms-xbap,application /vnd.ms-xpsdocument,application/xaml + xml,application/vnd.ms-powerpoint,application/vnd.ms-excel,application/msword,application/x-shockwave-flash,*/* Thanks! – markthegrea 2010-06-24 15:06:22
應該添加java標籤。 – h3xStream 2010-06-24 13:22:06