JAVA RESTful Service
Думаю,что никого уже нельзя удивить такими сервисами ,да и рассказывать, что это такое я не буду.(Если что погуглите)
А я просто хочу показать простой пример создания таких сервисов и клиентов к нему.(может кому нибудь это будет полезно)
Поехали.
Создадим обычный maven проект и добавим следующие зависимости
com.sun.jersey jersey-server 1.19
Этого достаточно чтобы поднять простой сервис с Jersey и Jax-RS.
Выглядеть он будет достаточно тривиально,примерно следующим образом:
@Path("/") public class RestService { @GET//метод обращения @Path("/helloworld")//относительный путь @Produces(MediaType.TEXT_PLAIN)//Мы можем указать представление типа MIME для ресурса, используя Produces аннотацию public String getClichedMessage() { return "Hello World"; } @GET @Path("/verify") @Produces(MediaType.TEXT_PLAIN) public Response verifyRESTService(InputStream incomingData) { String result = "Thats ok"; return Response.status(200).entity(result).build(); } @POST @Path("/post") @Consumes(MediaType.APPLICATION_JSON) public Response post(String incomingData) { JSONObject jsonObject; try { jsonObject = new JSONObject(incomingData); } catch (JSONException ex) { return Response.status(500).entity("Error while parsing").build(); } System.out.println("Data Received: " + jsonObject.toString()); return Response.status(200).entity(jsonObject.toString()).build(); } @POST @Path("/paramPost") @Consumes(MediaType.APPLICATION_JSON) public Response postWithParam(@FormParam("data")String incomingData) { JSONObject jsonObject; try { jsonObject = new JSONObject(incomingData); } catch (JSONException ex) { return Response.status(500).entity("Error while parsing").build(); } System.out.println("Data Received: " + jsonObject.toString()); return Response.status(200).entity(jsonObject.toString()).build(); } public static void main(String[] args) throws IOException { HttpServer server = HttpServerFactory.create("http://localhost:9998/"); server.start(); System.out.println("Сервер запущен"); } }
Выглядит невероятно просто,возможности конечно значительно шире,чем то что я тут набросал,но это просто пример.
Чтобы создать клиент для проверки нашего сервиса есть 2 варианта.
1.С использованием Apache Http Client
public static void main(String[] argv) throws IOException { String jsonObject="{\n" + " \"tutorials\": {\n" + " \"id\": \"Apt\",\n" + " \"topic\": \"REST Service\",\n" + " \"description\": \"This is REST Service\"\n" + " }\n" + "}"; HttpClient httpClient = HttpClientBuilder.create().build(); HttpPost postRequest = new HttpPost(new URIBuilder().setPath("http://localhost:9998/post").toString()); StringEntity input = new StringEntity(jsonObject); input.setContentType("application/json"); postRequest.setEntity(input); HttpResponse response1 = httpClient.execute(postRequest); System.out.println(new BasicResponseHandler().handleResponse(response1)); HttpPost request = new HttpPost("http://localhost:9998/paramPost"); request.setEntity(new UrlEncodedFormEntity(Collections.singletonList(new BasicNameValuePair("data", jsonObject)))); HttpResponse response = httpClient.execute(postRequest); System.out.println(new BasicResponseHandler().handleResponse(response)); }
2.Используя Jersey клиент.
Добавим в зависимости
com.sun.jersey jersey-client 1.19 com.sun.jersey jersey-json 1.19
И код самого клиента
public class ClientJersey { public static void main(String[] args) { try { String jsonObject="{\n" + " \"tutorials\": {\n" + " \"id\": \"Apt\",\n" + " \"topic\": \"REST Service\",\n" + " \"description\": \"This is REST Service\"\n" + " }\n" + "}"; ClientConfig clientConfig = new DefaultClientConfig(); clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE); Client clientJersey = Client.create(clientConfig); WebResource webResource = clientJersey.resource("http://localhost:9998/post"); ClientResponse response = webResource.accept("application/json").type("application/json").post(ClientResponse.class, jsonObject); if (response.getStatus() != 200) { throw new RuntimeException("Failed : HTTP error code : " + response.getStatus()); } String output = response.getEntity(String.class); System.out.println("Server response .... \n"); System.out.println(output); } catch (Exception e) { e.printStackTrace(); } } }
Вот собственно и все,вот так просто.