SpringQueryMap在项目中的应用

本文介绍了如何通过引入SpringQueryMap改进项目中get请求的参数管理,实现更清晰的API设计,减少方法名复杂度。

项目应用中遇到get请求传递参数的问题:
1、传递多个参数。
2、传递的参数可以为空,为空则不传递出去。

刚开始的项目比较单一,直接写的请求方法,比如:


@FeignClient("cmdb", url = "\${fastone.global.cmdb.host}")
interface CmdbClient {

	@GetMapping("/cmdb/v1/product")
	fun findByFastoneStrategyAndProductLevelAndPayTypeAndFastoneRegion(
		@RequestParam fastoneStrategy: String,
		@RequestParam productLevel: String,
		@RequestParam payType: String,
		@RequestParam fastoneRegion: String,
	): Response<List<CmdbProduct>>

	/**
	 * 带Context查询CmdbProduct信息
	 * context contains:fastoneStrategy,productLevel,payType,fastoneRegion
	 */
	@GetMapping("/cmdb/v1/product")
	fun findByFastoneStrategyAndProductLevelAndPayTypeAndFastoneRegionAndFastoneModel(
		@RequestParam fastoneStrategy: String,
		@RequestParam productLevel: String,
		@RequestParam payType: String,
		@RequestParam fastoneRegion: String,
		@RequestParam fastoneModel: String
	): Response<List<CmdbProduct>>


	@GetMapping("/cmdb/v1/product")
	fun findByFastoneStrategyAndProductLevelAndPayTypeAndFastoneRegionAndSystemPlatformAndProductTypeAndVendorModel(
		@RequestParam fastoneStrategy: String,
		@RequestParam productLevel: String,
		@RequestParam payType: String,
		@RequestParam fastoneRegion: String,
		@RequestParam systemPlatform: String,
		@RequestParam productType: String,
		@RequestParam vendorModel: String,
	): Response<List<CmdbProduct>>

}

上面的写法会造成查看方法和调用方法的地方都很难受,想查看或者调用方法都需要仔细查看名字

有没有什么方法能满足上面的需求,经同事推荐使用@SpringQueryMap 注解
在这里插入图片描述

使用方法:

@FeignClient("cmdb", url = "\${fastone.global.cmdb.host}")
interface CmdbClient {

	@GetMapping("/cmdb/v1/product")
	fun getCmdbProducts(@SpringQueryMap condition: CmdbQueryCondition): Response<List<CmdbProduct>>
}
data class CmdbQueryCondition(
	val skuId: String? = null,
	val fastoneStrategy: String? = null,
	val productLevel: String? = null,
	val fastoneRegion: String? = null,
	val vendor: String? = null,
	val productType: ProductType? = null,
	val systemPlatform: SystemPlatform? = null,
	val fastoneModel: String? = null,
	val fastoneFamily: String? = null,
	val vendorModel: String? = null,
	val payType: String? = null,
)

使用的方法的地方:

	/**
	 * 获取IMAGE,STORAGE,STORAGE_EFS,TRAFFIC,FASTSTOR_ESSENTIAL等非VM的报价
	 */
	fun findByFastoneRegionAndFastoneModel(fastoneRegion: String, fastoneModel: String): CmdbProduct? {
		return cmdbClient.getCmdbProducts(
			CmdbQueryCondition(
				fastoneStrategy = fastoneStrategy,
				productLevel = productLevel,
				payType = PayType.ONDEMAND.name,
				fastoneRegion = fastoneRegion,
				fastoneModel = fastoneModel
			)
		).data.firstOrNull()
	}

这样整个方法就很清晰了

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MonkeyKing.sun

对你有帮助的话,可以打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值