使用jersey2.X发布rest服务

来源:互联网 发布:java与javascript区别 编辑:程序博客网 时间:2024/05/30 22:57

使用jersey2.X发布rest服务

jersey2.X发布rest服务的方式跟jersey1.X版本不同,需要做不同的处理;本文使用的jersey版本为2.26-b07,下载地址:http://repo1.maven.org/maven2/org/glassfish/jersey/bundles/jaxrs-ri/2.26-b07/

1、需要的jar包(下载的jaxrs-ri-2.26-b07.zip解压后的lib、api和ext目录下的所有jar包合集)
需要的jar包1
需要的jar包2
需要的jar包3
2、创建rest服务所有的package路径(这里以com.cherry.rest为例),并在包下创建rest服务代码

package com.cherry.rest;import com.cherry.model.Student;import com.cherry.util.JsonUtil;import javax.validation.constraints.NotNull;import javax.ws.rs.*;import javax.ws.rs.core.MediaType;/** * Created by Leander Cherry on 2017/7/2. */@Path("/test")public class RestService{    @GET    @Path("/getText")    public String getString(@QueryParam("name") String name)    {        return "Hello, " + name;    }    @GET    @Path("getJson")    @Produces(MediaType.APPLICATION_JSON)    public Student getJson(@QueryParam("name") String name)    {        Student student = new Student();        student.setName(name);        return student;    }    @POST    @Path("jsonTest")    @Consumes(MediaType.APPLICATION_JSON)    @Produces(MediaType.APPLICATION_JSON)    public Student addStudent(@NotNull() Student student)    {        return student;    }}

其中Student类是我自己实现的一个学生信息的Bean,实际开发时可以是任意自己实现的一个Bean均可

3、创建RestApplication类,该类继承自ResourceConfig,来配置需要扫描加载为rest服务的类所在的package,同时可以配置一下其他需要的配置,本例中不做任何配置

package com.cherry;/*** Created by Leander Cherry on 2017/7/2.*/import org.glassfish.jersey.server.ResourceConfig;public class RestApplication extends ResourceConfig{    public RestApplication()    {        //服务类所在的包路径        packages("com.cherry.rest");    }}

4、在web.xml中配置servletContainer和对应的ResourceConfig从而使得服务启动时能够自动扫描需要加载的rest服务类,同时如果rest服务要使用json格式的文本传输还需要设置Json相关的配置,使得Json可以自动转换

<servlet>    <servlet-name>jersey_rest</servlet-name>    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>    <init-param>        <param-name>javax.ws.rs.Application</param-name>        <param-value>com.cherry.RestApplication</param-value>    </init-param>    <init-param>        <param-name>javax.json.stream.JsonGenerator.prettyPrinting</param-name>        <param-value>true</param-value>    </init-param>    <load-on-startup>1</load-on-startup></servlet><servlet-mapping>    <servlet-name>jersey_rest</servlet-name>    <url-pattern>/rest/*</url-pattern></servlet-mapping>

5、将服务发布到tomcat或其他Web容器中即实现了一个Rest服务端,可以直接通过postman或任意的浏览器访问发布的rest接口
getJson
getJSON

getText
getText

POST JSON
POSTJSON

注意:
1、在RestApplication中,当前的例子其实packages方法的参数设置为加载任意的包路径,本实例中的rest服务都能发布成功,博主怀疑时ResourceConfig会自动扫描递归加载子类所在的包及其各级子包,但是看了jersey的官方API文档也没找到支撑的论据,所以目前我还是一阵懵逼,不懂为什么;
2、如果要支持Json文本必须在web.xml中配置Json相关的支持(javax.json.stream.JsonGenerator.prettyPrinting设置为true);
3、如果某个接口支持请求或响应为Json格式的文本,需要将相应的Consumes和Produces注解设置为application/json格式