ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

springboot 利用ConverterFactory接口自定义通用的Converter

2021-04-10 20:33:33  阅读:29  来源: 互联网

标签:java String 自定义 Color value ConverterFactory return public springboot


本文为string -> enum通用类型的代码示例。springboot版本为2.3.4.RELEASE

通用的枚举接口:
ConverterBaseEnum.java

public interface ConverterBaseEnum {
    String getValue();
}

枚举类:
Color.java

public enum Color implements ConverterBaseEnum {
    YELLOW(1, "黄"),
    RED(2, "红"),
    GREED(3, "绿");

    Integer value;
    String msg;

    Color(Integer value, String msg) {
        this.value = value;
        this.msg = msg;
    }

    @Override
    public String getValue() {
        return String.valueOf(value);
    }
}

核心部分:实现ConverterFactory接口
EnumsConvertorFactory.java

@Component
public class EnumsConvertorFactory implements ConverterFactory<String, ConverterBaseEnum> {
    @Override
    public <T extends ConverterBaseEnum> Converter<String, T> getConverter(Class<T> targetType) {
        return source ->  {
            T ret = null;
            for (T t : targetType.getEnumConstants()) {
                if (t.getValue().equals(source)) {
                    ret = t;
                }
            }
            return ret;
        };
    }
}

配置类:
WebMvcConfig.java 继承WebMvcConfigurer

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Autowired
    EnumsConvertorFactory enumsConvertorFactory;

    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverterFactory(enumsConvertorFactory);
    }
}

controller类:
TestController.java

@RestController
public class TestController {
    //URL: http://localhost/converter?color=2
    @PostMapping("/converter")
    public Color test01(Color color) {
        return color;
    }
}

代码部分完毕。
利用Postman测试:
在这里插入图片描述
debug:
可以看到WebDataBinder binder中确实已经将我们自定义的Converter加进去了。
在这里插入图片描述在这里插入图片描述
以上。

标签:java,String,自定义,Color,value,ConverterFactory,return,public,springboot
来源: https://blog.csdn.net/weixin_38560512/article/details/115583234

专注分享技术,共同学习,共同进步。侵权联系[admin#icode9.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有