WebService的基礎整合ssh框架的應用
阿新 • • 發佈:2019-02-11
還是基於maven的整合.
在pom.xml檔案中新增依賴:
<properties> <cxf.version>3.0.1</cxf.version> </properties> <!-- 匯入webservice依賴 --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>${cxf.version}</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxrs</artifactId> <version>${cxf.version}</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-rs-client</artifactId> <version>${cxf.version}</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-rs-extension-providers</artifactId> <version>${cxf.version}</version> </dependency>
在web.xml中加入對CXF的宣告:
編寫一個applicationContext-webService.xml. 記得在web.xml檔案中配置掃描spring的xml配置檔案的時候要能掃描到這個檔案.<!--配置CXF宣告--> <servlet> <servlet-name>CXFService</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>CXFService</servlet-name> <!--配置CXF的訪問路徑./services/後面接appli.... .xml中的 /GandPandService". 然後接每個方法上獨有的path--> <url-pattern>/services/*</url-pattern> </servlet-mapping>
以下就是正式的編寫一個能被其他專案以及跨專案進行訪問的一個service層.<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa" xmlns:task="http://www.springframework.org/schema/task" xmlns:jaxrs="http://cxf.apache.org/jaxrs" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd "> <!-- address="/UsersService. 這個是自定義的一個訪問路徑, 接在web.xml檔案中配置的/service後面. --> <jaxrs:server id="usersService" address="/UsersService"> <jaxrs:serviceBeans> <!--具體的實現類--> <bean class="com.cn.webservice_serviceimpl.UsersServiceImpl" /> </jaxrs:serviceBeans> <!--配置的WebService需要用到的interceptor(攔截器)--> <jaxrs:inInterceptors> <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean> </jaxrs:inInterceptors> <jaxrs:outInterceptors> <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean> </jaxrs:outInterceptors> </jaxrs:server> </beans>
package com.cn.webservice_service;
import com.cn.hnust.domain.User;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import java.util.List;
//這裡定義的是CXF預留的訪問介面. 通過以下這些註解的path等進行約定訪問.
public interface UsersService {
/*
* @GET:表示的是請求的方法.
* @Path("/findAllUsers")配置的訪問路徑.
* @Produces({"application/xml", "application/json"}):表示可以以xml和json格式返回資料
* */
@GET
@Path("/findAllUsers")
@Produces({"application/xml", "application/json"})
public List<User> findAllUsers();//查詢所有
@GET
@Path("/findAllUsers")
@Produces({"application/xml", "application/json"})
public User findByUsername(String username);//通過使用者名稱查詢使用者物件
@GET
@Path("/getUser/{id}")
@Produces({"application/xml", "application/json"})
public User getUser(@PathParam("id") int id);//通過id查詢對應資料
// @Consumes({"application/xml", "application/json"}): 表示可以接受xml和json格式的資料
@POST
@Path("/saveUser")
@Consumes({"application/xml", "application/json"})
public void saveUser(User user);//儲存一個Bean物件.
@PUT
@Path(value = "/update")
@Consumes({"application/xml", "application/json"})
public void updateUser(User user);//修改一個物件內容上.
}
這裡是上面service的具體實現類.
package com.cn.webservice_serviceimpl;
import com.cn.hnust.domain.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.cn.webservice_dao.UserRepository;
import com.cn.webservice_service.UsersService;
import java.util.List;
@Service
@Transactional
public class UsersServiceImpl implements UsersService {
// 注入DAO層
@Autowired
private UserRepository userRepository;
@Override
public List<User> findAllUsers() {
return userRepository.findAll();
}
// 通過使用者名稱查詢有沒有匹配的使用者
@Override
public User findByUsername(String username) {
return userRepository.findByUsername(username);
}
@Override
public User getUser(int id) {
return null;
}
@Override
public void saveUser(User user) {
}
@Override
public void updateUser(User user) {
}
}
最後就是一個簡短的使用Spring - data - JPA框架編寫的一個DAO層了.
package com.cn.webservice_dao;
import com.cn.hnust.domain.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
public interface UserRepository extends JpaRepository<User, Integer>, JpaSpecificationExecutor<User> {
// 一個簡單的通過使用者名稱查詢使用者物件的方法.
User findByUsername(String username);
}
以上,真正的重點是 在web.xml中的配置, 以及編寫的applicationContext-Webservice.xml
之後就是service層的一些註解需要注意一下.
在另一個專案中訪問這個專案的service的話, 基礎程式碼如下:
第一個是訪問路徑.
accpet指的是宣告接收資料的格式.
get(類名.class): 指的是將獲取到的json格式一一對應封裝到這個實體類中.
WebClient.create("http://localhost:9012/taotao-manager-web/services/UsersService/findAllUsers").accept(MediaType.APPLICATION_JSON_TYPE).getCollection(Games.class);