Spring 自定义接口参数解析器 您所在的位置:网站首页 自定义解析接口是什么 Spring 自定义接口参数解析器

Spring 自定义接口参数解析器

2024-07-10 04:14| 来源: 网络整理| 查看: 265

场景

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 实验室设备网 版权所有