Flea RESTful接口服務端接入
本篇介紹 flea-frame-jersey子產品下的flea-frame-jersey-server 子子產品,該子產品封裝了通用的POST、PUT、DELETE 和 GET資源。
1. 服務端依賴
項目位址可至GitHub 檢視 flea-frame-jersey-server
<!-- FLEA FRAME JERSEY SERVER-->
<dependency>
<groupId>com.huazie.frame</groupId>
<artifactId>flea-frame-jersey-server</artifactId>
<version>1.0.0</version>
</dependency>
2. 服務端接入步驟
- 服務端自定義資源入口類,繼承 FleaResourceConfig;
- 服務端自定義資源,并配置到資源表中;
- 服務端自定義資源服務,并配置到資源服務表中;
- 服務端完成資源服務的業務邏輯開發,配置國際碼和錯誤碼映射關系。
3. 具體接入講解
3.1 資源入口類定義
import com.huazie.frame.jersey.server.core.FleaResourceConfig;
import javax.ws.rs.ApplicationPath;
/**
* <p> FleaFS 資源入口 </p>
*
* @author huazie
* @version 1.0.0
* @since 1.0.0
*/
@ApplicationPath("/fleafs/*")
public class FleaFSResourceConfig extends FleaResourceConfig {
/**
* <p> 無參構造方法 </p>
*
* @since 1.0.0
*/
public FleaFSResourceConfig() {
super();
// 這裡加入自定義的配置資訊
}
}
3.2 資源定義
REST服務的核心是對外公布的資源API。如下 DownloadResource 資源類由注解Path修飾,其資源路徑為 download。
/**
* <p> 下載下傳資源類 </p>
*
* @author huazie
* @version 1.0.0
* @since 1.0.0
*/
@Path("download")
public class DownloadResource extends Resource implements JerseyGetResource, JerseyPostResource {
@Override
public FleaJerseyResponse doGetResource(String requestData) {
return doResource(requestData);
}
@Override
public FleaJerseyResponse doPostResource(FleaJerseyRequest request) {
return doResource(request);
}
}
有了資源類,下面就需要配置資源;資源配置在 flea_jersey_resource 表中。新增如下配置:
應用服務啟動後,FleaFSResourceConfig 會掃描所有定義的資源包,即将如上resource_packages 字段定義的包都掃描一遍,這樣這些包内所有資源類所提供的資源路徑将被映射到記憶體中。詳細内容可參考 FleaResourceConfig。
3.3 資源服務定義
3.3.1 資源服務接口
public interface IFleaDownloadSV {
/**
* <p> 下載下傳授權 </p>
*
* @param input 下載下傳授權業務入參
* @return 下載下傳授權業務出參
* @throws Exception
* @since 1.0.0
*/
OutputDownloadAuthInfo downloadAuth(InputDownloadAuthInfo input) throws Exception;
}
3.3.2 資源服務實作類
/**
* <p> Flea下載下傳服務實作類 </p>
*
* @author huazie
* @version 1.0.0
* @since 1.0.0
*/
@Service
public class FleaDownloadSVImpl implements IFleaDownloadSV {
@Override
public OutputDownloadAuthInfo downloadAuth(InputDownloadAuthInfo input) throws Exception {
return null;
}
}
3.3.3 資源服務配置
資源服務配置在 flea_jersey_res_service 表中。
字段名 | 中文描述 |
---|---|
service_code | 服務編碼 |
resource_code | 資源編碼 |
service_interfaces | 資源服務接口類 |
service_method | 資源服務方法 |
service_input | 資源服務入參 |
service_output | 資源服務出參 |
3.3.4 資源服務調用
上述資源服務調用邏輯, 可參考 服務調用過濾器 InvokeServiceFilter。
3.4 資源服務業務邏輯開發
private static final Logger LOGGER = LoggerFactory.getLogger(FleaDownloadSVImpl.class);
@Override
public OutputDownloadAuthInfo downloadAuth(InputDownloadAuthInfo input) throws Exception {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("FleaDownloadSVImpl##downloadAuth(InputDownloadAuthInfo) Start");
}
String fileId = input.getFileId();
if (StringUtils.isBlank(fileId)) {
// 入參【{0}】不能為空
throw new ServiceException("ERROR-SERVICE0000000001", "fileId");
}
OutputDownloadAuthInfo output = new OutputDownloadAuthInfo();
// 示範直接塞了一個随機數
output.setToken(RandomCode.toUUID());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("FleaDownloadSVImpl##downloadAuth(InputDownloadAuthInfo) End");
}
return output;
}
代碼中出現 ERROR-SERVICE0000000001 的異常,需要配置如下國際碼和錯誤碼的映射關系: (國際碼和錯誤碼映射配置表 flea_jersey_i18n_error_mapping)