Spring boot整合Jersey

来源:互联网 发布:淘宝源 编辑:程序博客网 时间:2024/05/19 16:34

一:介绍

    Jersey是jax-rs实现。jax-rs是基于rest的web服务的Java API。Jersey RESTful web服务是SUN Microsystems提供的开放源码。用Jersey 2来创建RESTful web服务。我们将在这里讨论jax-rs API,它将用于创建Jersey RESTful web服务和Jersey客户端,然后我们将为Jersey RESTful web服务和Jersey客户端创建演示应用程序。我们将使用JPA和Hibernate执行CRUD操作。


   

二: 新建项目 

    1:  jax-rs API来创建Jersey REST web 找到javax.ws。用于处理HTTP方法的rs API。

      @GET:用@GET注释的方法对HTTP GET方法进行响应。

     @POST:用@POST注释的方法对HTTP POST方法进行响应。

     @PUT:用@PUT注释的方法对HTTP PUT方法进行响应。

     @DELETE:带@DELETE的方法对HTTP DELETE方法进行响应。

    @HEAD:用@HEAD注释的方法对HTTP HEAD方法进行响应。

:2: 新建项目为eglsc-Jersey如图:

三: 创建Maven文件 

        找到本例中使用的Maven文件。

    

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>com.eglsc</groupId>    <artifactId>eglsc-jersey</artifactId>    <version>1.0-SNAPSHOT</version>    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>1.4.5.RELEASE</version>    </parent>    <properties>        <java.version>1.7</java.version>        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>    </properties>    <dependencies>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-jersey</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-data-jpa</artifactId>        </dependency>        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>            <version>5.1.26</version>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-devtools</artifactId>            <optional>true</optional>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>druid</artifactId>            <version>1.0.24</version>        </dependency>        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>fastjson</artifactId>            <version>1.2.14</version>        </dependency>        <dependency>            <groupId>org.projectlombok</groupId>            <artifactId>lombok</artifactId>            <version>1.16.10</version>        </dependency>        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <version>4.12</version>        </dependency>               <dependency>            <groupId>com.github.xphsc</groupId>            <artifactId>eglsc-helper</artifactId>            <version>1.2.0</version>        </dependency>    </dependencies>    <build>        <plugins>            <plugin>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>            </plugin>        </plugins>    </build></project>

找到Spring boot启动器的描述。

spring-boot-starter-parent:父项目POM用于依赖关系管理。

spring-boot-starter-web::构建web、REST应用程序的启动器。它使用tomcat服务器作为默认的嵌入式服务器。

Spring-stardata-data JPA:使用hibernate的Spring数据JPA启动器。

spring-boot-starter-jersey::jersey的rest式web服务的启动器。

spring-boot-devtools:它提供开发工具。这些工具在应用程序开发模式中很有帮助。开发人员工具的一个特性是自动重启服务器,以实现代码的任何更改。

spring-boot-maven-plugin:它被用来创建应用程序的可执行JAR。

2 :创建jersey 配置项

javaconfig

@Configuration@ComponentScan({"com.eglsc"})public class JerseyConfig extends ResourceConfig {    public JerseyConfig() {        register(RequestContextFilter.class);        packages("com.eglsc");        register(JacksonFeature.class);        register(RequestContextFilter.class);        register(LoggingFilter.class);        register(SpringComponentProvider.class);    }}

3。创建application.properties

在Spring boot中,为了配置与数据库相关的属性、Hibernate和日志,我们需要使用application.properties。我们正在使用JPA规范的Hibernate实现。


druid.url=jdbc:mysql://localhost:3306/eglsc-jerseydruid.driver-class=com.mysql.jdbc.Driverdruid.username=rootdruid.password=rootdruid.initial-size=1druid.min-idle=1druid.max-active=20druid.test-on-borrow=truelogging.level.org.hibernate.SQL=INFOlogging.level.org.hibernate.type.descriptor.sql.BasicBinder=INFOlogging.level.com.concretepage= INFO


四 代码的具体实现
   1:新建model 对象类
     
@Entity@Table(name="sys_user")@Datapublic class User implements Serializable {    @Id    private Integer id;    private String username;    private String password;}
2:新建 dao层操作类
public interface UserDao extends JpaRepository<User,Integer> {}

3:新建controller
  
@Path("/user")@Transactional@Component@Slf4jpublic class UserController {    @Autowired    private UserDao userDao;    @GET    @Path("/{id}")    @Produces(MediaType.APPLICATION_JSON)    public Response findUserByid(@PathParam("id")Integer id){        User user= userDao.findOne(id);        return Response.ok(user).build();    }    @GET    @Path("/")    @Produces(MediaType.APPLICATION_JSON)    public Response findUser(){        List<User> userlist= userDao.findAll();        return Response.ok(userlist).build();    }    @POST    @Path("/add")    @Consumes(MediaType.APPLICATION_JSON)    public Response addUser(User user) {        User us= userDao.save(user);        if (us==null) {            log.info("user already exits.");            return Response.status(Response.Status.CONFLICT).build();        }        return Response.created(URI.create("/user/" + us.getId())).build();    }    @PUT    @Path("/update")    @Produces(MediaType.APPLICATION_JSON)    @Consumes(MediaType.APPLICATION_JSON)    public Response updateArticle(User user) {        userDao.save(user);        return Response.ok(user).build();    }    @DELETE    @Path("/{id}")    @Consumes(MediaType.APPLICATION_JSON)    public Response deleteArticle(@PathParam("id") Integer id) {        userDao.delete(id);        return Response.noContent().build();    }}
    

4:spring boot启动类
@SpringBootApplicationpublic class Application {    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {        return builder.sources(Application.class);    }    public static void main(String[] args) {        SpringApplication.run(Application.class, args);    }}
五: 测试
 
@RunWith(SpringRunner.class)@SpringBootTest(classes = Application.class)@Slf4jpublic class UserTest {    @Test    public void getUser() {    Client client = ClientBuilder.newClient();        WebTarget base = client.target("http://localhost:8083/");        WebTarget details = base.path("/user");        List<User> userlist = details.request(MediaType.APPLICATION_JSON).get(new GenericType<List<User>>() {        });     log.info("list:"+userlist);        client.close();
}
}