一个API接口的例子,包括单元测试

本文详细阐述了如何通过平台接口获取指定区域的数据,包括省份、运营商、IP地址等信息,并通过分层封装实现数据的有效组织。利用平台信息、节点关系与IP关联映射,实现了数据的高效查询与呈现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

功能大体需求是通过平台获取该平台的所有节点(节点按省,运营商分组)以及节点的所有IP信息(地址和层级),表关系比较复杂,搞了两天才好,是自己一开始搞复杂了。

VO:存放所需元素实体类

public class PlatformIpVO implements Serializable {
	private String province;
	private String ISP;
	private List<PlatformMachineIp> platformMachineIps;
	private String platformNodes;
	
	getters and setters...
}

Service:

/**据平台查询区域数据,省,isp,ip等 */
public List<PlatformIpVO> getIpsAreaByPlatform(String platform);
@Override
public List<PlatformIpVO> getIpsAreaByPlatform(String pl_name_en) {
	pl_name_en = StringUtils.trimToEmpty(pl_name_en);
	if(pl_name_en.equals("")){
		return null;
	}
	List<PlatformIpVO> tempPlatformIpVOs = new ArrayList<PlatformIpVO>();
	List<PlatformIpVO> platformIpVOs = new ArrayList<PlatformIpVO>();
	PlatformInfo platformInfo = this.platformInfoMapper.findPlatformByEname(pl_name_en);//根据英文名获取平台id
	tempPlatformIpVOs = this.platformInfoMapper.getNodesByPlatform(platformInfo.getPlId());
	
	for(PlatformIpVO platformIpVO : tempPlatformIpVOs){//重新封装vo,添加ip信息
		platformIpVO = wrapPlatformIpVO(platformIpVO);
		platformIpVOs.add(platformIpVO);
	}
	return platformIpVOs;
}

Method:

/**重新封装platformIpVO,给PlatformMachineIps赋值*/
PlatformIpVO wrapPlatformIpVO(PlatformIpVO platformIpVO){
	String ispShortname = this.platformInfoMapper.getIspShortnameByid(platformIpVO.getISP());
	platformIpVO.setISP(ispShortname);
	String[] platformNodes = platformIpVO.getPlatformNodes().split(",");
	List<PlatformMachineIp> platformMachineIps = this.platformMachineMapper
			.getMachineIpsByNodes(platformNodes);
	platformIpVO.setPlatformMachineIps(platformMachineIps);
	return platformIpVO;
}
Mapper.java:

/** 根据平台id获取节点*/
List<PlatformIpVO> getNodesByPlatform(@Param("pl_id") Integer pl_id);

/** 通过isp的id获取shortname */
String getIspShortnameByid(@Param("isp") String isp);
Mapper.xml:

<!-- 通过平台id获取平台节点vo对象,不包含ip fangguitang@dnion.com-->
<select id="getNodesByPlatform" resultType="PlatformIpVO">
	SELECT pn.province AS province,pn.nd_isp AS ISP,GROUP_CONCAT(pn.nd_id) AS platformNodes
	FROM platform_info pi 
	LEFT JOIN platform_node_relation pnr ON pnr.pl_id = pi.pl_id
	LEFT JOIN platform_node pn ON pn.nd_id = pnr.nd_id
	WHERE pi.pl_id = #{pl_id}
	GROUP BY pn.province,pn.nd_isp
</select>
<!-- 通过isp的id获取shortname -->
<select id="getIspShortnameByid" resultType="STRING">
	SELECT si.shortname
	FROM system_isp si
	WHERE si.id = #{isp}
</select>
Test:测试类:

//通过平台获取节点信息,ip信息
@Test
@Rollback
public void testGetIpsAreaByPlatform(){
	String platform = "XNOP060";
	try {
		ipPlatformService.getIpsAreaByPlatform(platform);
	} catch (Exception e) {
		e.printStackTrace();
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值