SpringMvc Get请求传入枚举类型

本文介绍了如何在SpringMVC中处理Get请求传入枚举类型的问题,包括创建自定义枚举接口IEnum、实现EnumConvertFactory进行字符串到枚举的转换,以及如何在WebMvcConfigurer中注册转换器。

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

SpringMvc Get请求传入枚举类型

spring默认的枚举转换器是 StringToEnumConverterFactory
通过 Enum.valueOf(this.enumType, source.trim()) 进行转换
当枚举的值是数字时,会报错

创建自定义枚举 IEnum

import java.io.Serializable

/**
 * 通用枚举接口,定义了枚举的基本行为和属性。
 *
 * @param <V> 枚举值的类型,该类型需实现Serializable接口,以便于序列化和反序列化。
 * @param <E> 子枚举类型,指明实现该接口的具体枚举类。
 */
interface IEnum<V : Serializable> {

    /**
     * 获取枚举项的值。该属性被[@JsonValue]注解标记,用于在JSON序列化和反序列化时使用。
     */
    @get:JsonValue
    val value: V

    /**
     * 从值反序列化枚举。这是一个companion object方法,用于根据提供的值查找并返回对应的枚举常量。
     *
     * @param value 要查找的枚举值。
     * @param B 实现IEnum接口的枚举类。
     * @return 找到的枚举常量,如果未找到则返回null。
     */
    companion object {
        inline fun <reified B, V> Class<B>.fromValue(value: V): B?
                where B : IEnum<V>, V : Serializable {
            return enumConstants?.asSequence()
                ?.filter { it.value == value } // 筛选出值匹配的枚举常量
                ?.firstOrNull() // 获取第一个匹配项,若无则返回null
        }
    }
}


创建枚举转换工厂 EnumConvertFactory

import org.springframework.core.convert.converter.Converter
import org.springframework.core.convert.converter.ConverterFactory

/**
 * 枚举转换工厂类,用于将字符串转换为指定的枚举类型。
 */
class EnumConvertFactory : ConverterFactory<String, IEnum<*>> {

    /**
     * 获取一个转换器,用于将字符串转换为指定的枚举类型T。
     *
     * @param targetType 转换目标枚举类型的Class对象。
     * @return 返回一个字符串到枚举类型的转换器。
     */
    override fun <T : IEnum<*>> getConverter(targetType: Class<T>): Converter<String, T> {
        return Converter { source ->
            // 尝试找到与给定字符串匹配的枚举常量,如果没有找到则返回null。
            targetType.enumConstants.firstOrNull { it.value.toString() == source }
        }
    }
}

注册转换器

import org.springframework.context.annotation.Configuration
import org.springframework.format.FormatterRegistry
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer

/**
 * WebMvc配置类,用于配置Spring MVC的一些行为。
 */
@Configuration
class WebMvcConfiguration : WebMvcConfigurer {
    /**
     * @param registry 格式化器注册表,用于注册转换器。
     */
    override fun addFormatters(registry: FormatterRegistry) {
        registry.addConverterFactory(EnumConvertFactory())
    }
}

基于以上的配置,在控制器方法中,可以使用Get请求来接收实现IEnum的枚举类型的参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值