Usted puede hacer esto con Restlet utilizando anotaciones en su código y, o bien dejar que el contenido de la negociación operan en función de la cabecera del agente de usuario Accept
o especificar la extensión en el URI (usando TunnelService de Restlet y MetadataService). Aquí hay un ejemplo (basado en 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();
}
}
de negociación de contenido funciona a través de la cabecera Accept:
curl -H "Accept: text/plain" http://localhost:8182/test
vuelve Hello!
curl -H "Accept: application/xml" http://localhost:8182/test
vuelve <test>Hello</test>
También funciona a través de la extensión (gracias a getTunnelService().setExtensionsTunnel(true)
):
curl http://localhost:8182/test.txt
vuelve Hello!
curl http://localhost:8182/test.xml
devuelve <test>Hello</test>
hay un default list of extension to media-type mapping, pero esto se puede configurar a través de la MetadataService.
etiqueta de java debe ser agregada. – h3xStream