创建Jersey REST 服务,基于Maven的实现
基于javase形式的rest服务
创建项目
我们首选使用 archetypegroupid 为 org.glassfish.jersey.archetypes 的原型,archetypeartifactid为 jersey-quickstart-grizzly2 的原型,创建rest服务项目,使用idea创建项目如下:
点击ok后,使用该原始模型创建项目。
运行服务
项目创建好后,原始模型已经默认创建了一个rest服务,我们可以直接启动rest服务,进入项目的根目录,执行如下命令构建和启动服务:
mvnpackage
mvnexec:java
会启动rest服务,可以随时通过回车键停止服务,输出如下:
六月 19, 2017 11:12:23 下午 org.glassfish.grizzly.http.server.networklistener start
信息: started listener bound to [localhost:8080]
六月 19, 2017 11:12:23 下午 org.glassfish.grizzly.http.server.httpserver start
信息: [httpserver] started.
jersey app started with wadl available at http://localhost:8080/myapp/application.wadl
hit enter to stop it…
还提供了 wadl,通过访问 application.wadl 可以获取当前rest服务公布的接口:
<resources base="http://localhost:8080/myapp/"> <resource path="myresource"> <method id="getit" name="get"> <response> <representation mediatype="text/plain"/> </response> </method> </resource> </resources>
访问服务
可以直接访问 http://localhost:8080/myapp/myresource 就可以访问rest服务,直接访问rest服务,会输出 got it! 。
项目说明
启动服务的命令 mvn exec:java,该命令实际调用了 exec-maven-plugin 插件定义的一个值为 java 的 goal ,用以触发mainclass中的main函数,插件配置如下:
<plugin> <groupid>org.codehaus.mojo</groupid> <artifactid>exec-maven-plugin</artifactid> <version>1.2.1</version> <executions> <execution> <goals> <goal>java</goal> </goals> </execution> </executions> <configuration> <mainclass>org.drsoft.rest.main</mainclass> </configuration> </plugin>
rest服务类为 myresource,其 @path 中定义了资源路径,@get中定义了get方法getit(),@produces中定义了响应的类型为普通字符串,示例代码如下:
@path("myresource") public class myresource { @get @produces(mediatype.text_plain) public string getit() { return "got it!"; } }
rest服务的单元测试类myresourcetest,在单元测试类中,在执行单元测试前需要启动服务,并使用jersey client中定义的方法来调用rest服务,示例代码如下:
public class myresourcetest { private httpserver server; private webtarget target; @before public void setup() throws exception { // start the server server = main.startserver(); // create the client client c = clientbuilder.newclient(); // uncomment the following line if you want to enable // support for json in the client (you also have to uncomment // dependency on jersey-media-json module in pom.xml and main.startserver()) // -- // c.configuration().enable(new org.glassfish.jersey.media.json.jsonjaxbfeature()); target = c.target(main.base_uri); } @after public void teardown() throws exception { server.stop(); } @test public void testgetit() { string responsemsg = target.path("myresource").request().get(string.class); assertequals("got it!", responsemsg); } }
基于servlet容器服务
创建项目
我们首选使用 archetypegroupid 为 org.glassfish.jersey.archetypes 的原型,archetypeartifactid为 jersey-quickstart-webapp 的原型,创建rest服务项目,使用 idea 创建项目如下:
运行服务
由于这个是web项目,没有main函数,因此必须部署到servlet容器中,才能将其运行,我们需要配置tomcat,idea的配置如下:
点击 run菜单的 edit configuration,在打开的窗体中增加 tomcat 服务配置,指定tomcat 的安装目录,并设置当前站点的部署的虚拟目录名称,如下:
点击ok后,就配置好servlet容器,可以运行服务了
访问服务
服务启动后,我们可以访问 http://localhost:8080/restwebapp/webapi/myresource 来调用rest服务,会输出 got it!
项目说明
web根目录的名称为webapp,默认的servlet容器版本为2.5,并且配置了web-inf/web.xml文件来配置rest服务,web.xml配置如下:
<?xml version="1.0" encoding="utf-8"?> <!-- this web.xml file is not required when using servlet 3.0 container, see implementation details http://jersey.java.net/nonav/documentation/latest/jax-rs.html --> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <servlet> <servlet-name>jersey web application</servlet-name> <servlet-class>org.glassfish.jersey.servlet.servletcontainer</servlet-class> <init-param> <param-name>jersey.config.server.provider.packages</param-name> <param-value>org.drsoft.rest</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>jersey web application</servlet-name> <url-pattern>/webapi/*</url-pattern> </servlet-mapping> </web-app>
以上这篇创建jersey rest 服务,基于maven的实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。