天天看點

Spring boot整合Jersey

一:介紹

    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如圖:

Spring boot整合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-jersey

druid.driver-class=com.mysql.jdbc.Driver
druid.username=root
druid.password=root
druid.initial-size=1
druid.min-idle=1
druid.max-active=20
druid.test-on-borrow=true

logging.level.org.hibernate.SQL=INFO
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=INFO
logging.level.com.concretepage= INFO      

四 代碼的具體實作

1:建立model 對象類      
@Entity
@Table(name="sys_user")
@Data
public 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
@Slf4j
public 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啟動類      
@SpringBootApplication
public 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)
@Slf4j
public 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();      
}      
}