引言
本篇介绍 flea-jersey模块下的flea-jersey-server 子模块,该模块封装了通用的POST、PUT、DELETE 和 GET资源。
1. 服务端依赖
项目地址可至GitHub 查看 flea-jersey-server
1 2 3 4 5 6
| <dependency> <groupId>com.huazie.fleaframework</groupId> <artifactId>flea-jersey-server</artifactId> <version>2.0.0</version> </dependency>
|
2. 服务端接入步骤
- 服务端自定义资源入口类,继承 FleaResourceConfig;
- 服务端自定义资源,并配置到资源表中;
- 服务端自定义资源服务,并配置到资源服务表中;
- 服务端完成资源服务的业务逻辑开发,配置国际码和错误码映射关系。
3. 具体接入讲解
3.1 资源入口类定义
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
@ApplicationPath("/fleafs/*") public class FleaFSResourceConfig extends FleaResourceConfig {
public FleaFSResourceConfig() { super(); } }
|
3.2 资源定义
REST服务的核心是对外公布的资源API。如下 DownloadResource 资源类由注解Path修饰,其资源路径为 download。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
@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 资源服务接口
1 2 3 4 5 6 7 8 9 10 11 12
| public interface IFleaDownloadSV {
OutputDownloadAuthInfo downloadAuth(InputDownloadAuthInfo input) throws Exception; }
|
3.3.2 资源服务实现类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
@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 资源服务业务逻辑开发
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| 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)) { 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; }
|
3.5 国际码和错误码映射
代码中出现 ERROR-SERVICE0000000001 的异常,需要配置如下国际码和错误码的映射关系: (国际码和错误码映射配置表 flea_jersey_i18n_error_mapping)
总结
至此,Flea RESTful接口服务端接入已经完成。