Let me share with you my JAX-RS Client API Groovy DSL prototype, code is available in GitHub https://github.com/shamoh/jersey-groovy repo. It just supports GET and POST methods. This is really just concept prototype. But it shows power of Groovy and way how simplified JAX-RS Client API could look like.
The GitHub repository contains couple of unit tests to show the DSL. And also uses Spock Framework what is another Groovy DSL example, in this case as testing framework/API.
Examples
GET plain text, no parameters
JAX-RS Client API:
WebTarget target = ClientBuilder.newClient().target(RESOURCE_URL) def response = target.request(TEXT_PLAIN_TYPE).get(String) response == "Hello World!"
Jersey Groovy DSL:
def response = GET[RESOURCE_URL].text response == "Hello World!"
GET plain text, path parameter
JAX-RS Client API:
WebTarget target = ClientBuilder.newClient().target(RESOURCE_URL) def response = target.path("Jersey").request(TEXT_PLAIN_TYPE).get(String) response == "Hello Jersey!"
Jersey Groovy DSL:
def response = GET[RESOURCE_URL/"Jersey"].text response == "Hello Jersey!"
GET XML, path parameter
JAX-RS Client API:
WebTarget target = ClientBuilder.newClient().target(RESOURCE_URL) def response = target.path("Jersey").request(APPLICATION_XML_TYPE).get(Message) response instanceof Message response.greeting == "Hello Jersey!"
Jersey Groovy DSL:
def response = (GET[RESOURCE_URL/"Jersey"] & APPLICATION_XML_TYPE) as Message response instanceof Message response.greeting == "Hello Jersey!"
POST plain text, response text
JAX-RS Client API:
WebTarget target = ClientBuilder.newClient().target(RESOURCE_URL) def Entity entity = Entity.entity("Jersey", TEXT_PLAIN_TYPE); def response = target.request().post(entity, String) response == "Hello Jersey!"
Jersey Groovy DSL:
def response = POST[RESOURCE_URL] << "Jersey" as String response == "Hello Jersey!"
POST object as JSON, response text
JAX-RS Client API:
WebTarget target = ClientBuilder.newClient().target(RESOURCE_URL) def Entity entity = Entity.entity(new Message("Jersey", new Date()), APPLICATION_JSON_TYPE) def response = target.request().post(entity, String) response == "Hello Jersey!"
Jersey Groovy DSL:
def response = (POST[RESOURCE_URL] | APPLICATION_JSON_TYPE) \ << new Message("Jersey", new Date()) as String response == "Hello Jersey!"
(And finally there is simple slide deck to introduce the DSL API, same examples.)