一:介紹
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-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();
}
}