继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

【Spring】自定义类型转换器

慕标5832272
关注TA
已关注
手记 1263
粉丝 233
获赞 1008

状态的枚举类

public enum State implements IEnum{

    enabled(0,"正常"),
    disabled(1,"已注销"),
    risk(2,"风险")
    ;    private final Integer value;    private final String display;

    State( Integer value, String display) {        this.value = value;        this.display = display;
    }    @Override
    public String getByName() {        return name();
    }
}

现在我希望当前端通过如下接口传递"test/state?state=enabled"参数的时候,可以获取到状态对应的枚举

    @RequestMapping("test/state")    public String testEnum(State state){           //todo
          return "";
    }

那么我们需要做做如下代码实现

public class StringToEnumConverterFactory implements ConverterFactory<String, IEnum> {    @Override
    public <T extends IEnum> Converter<String, T> getConverter(Class<T> aClass) {        return new StringToEnumConverter<>(aClass);
    }    //将字符串转换成枚举来
    private final class StringToEnumConverter<T extends IEnum> implements Converter<String, T> {        private Class<T> enumType;        public StringToEnumConverter(Class<T> enumType) {            this.enumType = enumType;
        }        @Override
        public T convert(String s) {            for (T t : enumType.getEnumConstants()) {                if (t.getByName().equals(s)) {                    return t;
                }
            }            return null;
        }
    }
}

同时把这个处理器注册到Spring的容器中即可

@Configurationpublic class WebAppConfigurer implements WebMvcConfigurer {    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverterFactory(new StringToEnumConverterFactory());
    }
}



作者:eejron
链接:https://www.jianshu.com/p/5b830bd6b164


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP