天天看點

flea-frame-jersey使用之Flea RESTful接口服務端接入Flea RESTful接口服務端接入

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. 服務端接入步驟

  1. 服務端自定義資源入口類,繼承 FleaResourceConfig;
  2. 服務端自定義資源,并配置到資源表中;
  3. 服務端自定義資源服務,并配置到資源服務表中;
  4. 服務端完成資源服務的業務邏輯開發,配置國際碼和錯誤碼映射關系。

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 表中。新增如下配置:

flea-frame-jersey使用之Flea RESTful接口服務端接入Flea RESTful接口服務端接入

應用服務啟動後,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 表中。

flea-frame-jersey使用之Flea RESTful接口服務端接入Flea RESTful接口服務端接入
字段名 中文描述
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)

flea-frame-jersey使用之Flea RESTful接口服務端接入Flea RESTful接口服務端接入