当前位置: 移动技术网 > IT编程>开发语言>Java > SpringMVC处理参数中的枚举类型通用实现

SpringMVC处理参数中的枚举类型通用实现

2018年11月22日  | 移动技术网IT编程  | 我要评论

业务场景:前端提交了枚举的一个属性value,想由spring来完成参数类型自动转换成对应的枚举。

比方有一个枚举

@allargsconstructor(access = accesslevel.private)
@getter
@jsonformat(shape = jsonformat.shape.object)
public enum registerstatus implements springconverterableenum {
    waiting(0, "待审核"),

    passed(1, "已通过"),

    rejected(2, "已拒绝");

    private int value;

    private string desc;
}

实现统一自定义接口

需要自动转换的枚举实现统一自定义接口,可随意定义,此处直接用get方法

public interface springconverterableenum {
    int getvalue();
}

实现converterfactory

实现某一个class的类型自动转换,实现converter接口。要实现能支持多种枚举的通用转换,应当实现converterfactory接口。

实现中利用class提供的getenumconstants来获得任意枚举类型的values

public class valuedenumconverter implements converterfactory<string, springconverterableenum> {
    @override
    public <t extends springconverterableenum> converter<string, t> getconverter(class<t> targettype) {
        return new integertoenum(targettype);
    }

    private class integertoenum<t extends springconverterableenum> implements converter<string, t> {

        private final t[] values;

        public integertoenum(class<t> targettype) {
            values = targettype.getenumconstants();
        }

        @override
        public t convert(string source) {
            for (t t : values) {
                if (t.getvalue() == integer.valueof(source)) {
                    return t;
                }
            }
            return null;
        }
    }
}

注册到spring中

 <mvc:annotation-driven conversion-service="conversionservice"/>
 <bean class="org.springframework.context.support.conversionservicefactorybean" id="conversionservice">
        <property name="converters">
            <list>
                <bean class="com... valuedenumconverter"/>
            </list>
        </property>
    </bean>

之后,form或者ajax提交registerstatus=1时,则会自动转换为枚举对象。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网