Spring 自定义接口参数解析器 | 您所在的位置:网站首页 › 自定义解析接口是什么 › Spring 自定义接口参数解析器 |
场景
Spring后端某个接口的参数太多,而这些参数能够实例化一个实体类。 解决借助WebMvcConfigurer来配置接口的参数 代码结合容器化的思想,代码如下: 请求参数解析配置器:RequestParamResolveConfigurer.kt import org.springframework.context.annotation.Configuration import org.springframework.web.method.support.HandlerMethodArgumentResolver import org.springframework.web.servlet.config.annotation.WebMvcConfigurer @Configuration class RequestParamResolveConfigurer: WebMvcConfigurer { private val resolvers: MutableList = ArrayList() override fun addArgumentResolvers(resolvers: MutableList) { super.addArgumentResolvers(resolvers) super.addArgumentResolvers(this.resolvers) } fun addArgumentResolver(resolver: HandlerMethodArgumentResolver){ resolvers.add(resolver) } }请求参数解析注册机:RequestParamResolveRegister.kt import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Component import org.springframework.web.method.support.HandlerMethodArgumentResolver @Component class RequestParamResolveRegister { @Autowired private lateinit var configurer: RequestParamResolveConfigurer fun registerParamHandler(handler: HandlerMethodArgumentResolver){ configurer.addArgumentResolver(handler) } }配置具体的请求参数解析器:XXXXArgumentResolver.kt import com.dreaming.common.kotlin.toJSONString import org.springframework.beans.factory.annotation.Autowired import org.springframework.context.annotation.Bean import org.springframework.core.MethodParameter import org.springframework.stereotype.Component import org.springframework.web.bind.support.WebDataBinderFactory import org.springframework.web.context.request.NativeWebRequest import org.springframework.web.method.support.HandlerMethodArgumentResolver import org.springframework.web.method.support.ModelAndViewContainer @Component class XXXXArgumentResolver : HandlerMethodArgumentResolver { @Autowired private lateinit var register: RequestParamResolveRegister @Bean private fun initXXXXArgumentResolver(){ register.registerParamHandler(this) } override fun supportsParameter(parameter: MethodParameter): Boolean { val type = parameter.parameterType return type.isAssignableFrom(BaseXXXXBean::class.java) } override fun resolveArgument( parameter: MethodParameter, mavContainer: ModelAndViewContainer?, webRequest: NativeWebRequest, binderFactory: WebDataBinderFactory? ): Any? { val m = HashMap().apply { webRequest.parameterMap.forEach { (k, v) -> val v = v.mapNotNull { it }.lastOrNull { true } if(v != null){ put(k,v) } } } return XXXXParser.parse(m.toJSONString()) } } |
CopyRight 2018-2019 实验室设备网 版权所有 |