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();
}
}
}
Вот собственно и все,вот так просто.
Комментариев нет:
Отправить комментарий