用Java创建WebService非常容易。 将其添加到ServletContainer并将其部署到嵌入式WebServer仅需要几行代码。
让我们创建一个具有两个函数的简单计算器,作为WebService
的示例。 计算器将计算任何数量的squareRoot和平方。 它将返回一个简单的JSON响应,其中包含动作名称,输入和输出。
在我们开始之前,这是Gradle配置,您将需要:
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'
}
这是计算器的代码:
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
注释确定该请求的URI和@Produces
注释确定如何响应将被返回。 在我们的例子中,我们选择JSON,所有这些转换都可以无缝处理。
为了部署我们的WebService,我们需要一个要使用Jersey的ServletContainer和一个我们可以将要使用Jetty的容器放入其中的WebServer。
这是RestServer的代码:
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:// localhost:8080 / calculator / squareRoot?input = 16
从IntelliJ运行查询的一种非常不错的方法是使用内置的REST Client,可以在工具菜单下找到它。
当您运行REST客户端时,您将收到以下响应:
这是测试RESTful服务器的一种非常简单的方法。
翻译自: https://www.javacodegeeks.com/2015/03/creating-web-services-and-a-rest-server-with-jax-rs-and-jetty.html