Vous pouvez le faire avec Restlet en utilisant des annotations dans votre code et soit laisser la négociation de contenu exploitons en fonction de la tête Accept
de l'agent utilisateur ou spécifier l'extension dans l'URI (à l'aide de TunnelService de Restlet et MetadataService). Voici un exemple (basé sur 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();
}
}
travaille négociation de contenu via l'en-tête Accept:
curl -H "Accept: text/plain" http://localhost:8182/test
retours Hello!
curl -H "Accept: application/xml" http://localhost:8182/test
retours <test>Hello</test>
Il a également fonctionne via l'extension (merci à getTunnelService().setExtensionsTunnel(true)
):
curl http://localhost:8182/test.txt
retours Hello!
curl http://localhost:8182/test.xml
retours <test>Hello</test>
Il y a un default list of extension to media-type mapping, mais cela peut être configuré via le MetadataService.
java tag doit être ajouté. – h3xStream