Создать WebService в Java очень просто. Чтобы добавить его в ServletContainer и развернуть его на встроенном WebServer, нужно всего лишь несколько строк кода.
Давайте создадим простой калькулятор с парой функций в качестве примера WebService . Калькулятор будет вычислять squareRoot и квадрат любого числа. Он вернет простой JSON-ответ с именем действия, входом и выходом.
Прежде чем мы начнем, вам понадобится конфигурация Gradle:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
apply plugin: 'java'version = '1.0'repositories { mavenCentral()}dependencies { compile group: 'org.glassfish.jersey.core', name: 'jersey-server', version: '2.7' compile group: 'org.glassfish.jersey.containers', name: 'jersey-container-servlet-core', version: '2.7' compile group: 'org.glassfish.jersey.containers', name: 'jersey-container-jetty-http', version: '2.7' compile group: 'org.glassfish.jersey.media', name: 'jersey-media-moxy', version: '2.7' compile group: 'org.eclipse.jetty.aggregate', name: 'jetty-all', version: '9.3.0.M1' testCompile group: 'junit', name: 'junit', version: '4.11'} |
Это код для калькулятора:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
package example;import javax.ws.rs.GET;import javax.ws.rs.Path;import javax.ws.rs.Produces;import javax.ws.rs.QueryParam;import javax.ws.rs.core.MediaType;@Path("calculator")public class Calculator { @GET @Path("squareRoot") @Produces(MediaType.APPLICATION_JSON) public Result squareRoot(@QueryParam("input") double input){ Result result = new Result("Square Root"); result.setInput(input); result.setOutput(Math.sqrt(result.getInput())); return result; } @GET @Path("square") @Produces(MediaType.APPLICATION_JSON) public Result square(@QueryParam("input") double input){ Result result = new Result("Square"); result.setInput(input); result.setOutput(result.getInput()*result.getInput()); return result; } static class Result{ double input; double output; String action; public Result(){} public Result(String action) { this.action = action; } public String getAction() { return action; } public void setAction(String action) { this.action = action; } public double getInput() { return input; } public void setInput(double input) { this.input = input; } public double getOutput() { return output; } public void setOutput(double output) { this.output = output; } }} |
Аннотации определяют тип действия REST, которое будет применено к методу @GET , @PUT и т. @Path Аннотация @Path определяет URI запроса, а аннотация @Produces определяет, как ответ будет возвращен. В нашем случае мы выбираем JSON, преобразование которого выполняется без проблем.
Для развертывания нашего WebService нам нужен ServletContainer, для которого мы будем использовать Jersey, и WebServer, в который мы можем поместить контейнер, для которого мы будем использовать Jetty .
Это код для RestServer:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
package example;import org.eclipse.jetty.server.Server;import org.eclipse.jetty.servlet.ServletContextHandler;import org.eclipse.jetty.servlet.ServletHolder;public class RestServer { public static void main(String[] args) throws Exception { ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); context.setContextPath("/"); Server jettyServer = new Server(8080); jettyServer.setHandler(context); ServletHolder jerseyServlet = context.addServlet( org.glassfish.jersey.servlet.ServletContainer.class, "/*"); jerseyServlet.setInitOrder(0); jerseyServlet.setInitParameter( "jersey.config.server.provider.classnames", Calculator.class.getCanonicalName()); try { jettyServer.start(); jettyServer.join(); } finally { jettyServer.destroy(); } }} |
Запустив RestServer, вы сможете протестировать его с этим URL.
- HTTP: // локальный: 8080 / калькулятор / SquareRoot вход = 16
Действительно хороший способ выполнять запросы из IntelliJ — это использовать встроенный REST-клиент, который можно найти в меню инструментов.
Когда вы запустите клиент REST, вы получите этот ответ:
Это действительно простой способ проверить сервер RESTful.
| Ссылка: | Создание веб-служб и сервера отдыха с JAX-RS и Jetty от нашего партнера по JCG Даниэля Шая в блоге Rational Java . |

