自定义AnnotationFormatterFactory实现注解方式类型转换

场景

想要自定义注解,对某些特定字段属性按照自己想要的风格类型进行转换;例如:想把金额前添加货币¥符号,String转换成自己定义的实体类型。

步骤 (假设要在字符串前添加¥)

  • 定义一个注解
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})
public @interface MyAnno {
}
  • 自定义 AnnotationFormatterFactory
public class MyAnnotationFormatterFactory implements AnnotationFormatterFactory<MyAnno> {
	@Override
    public Set<Class<?>> getFieldTypes() {
        Set<Class<?>> types = new HashSet<>();
        types.add(String.class);
        return types;
    }
    
    @Override
    public Printer<?> getPrinter(MyAnno myAnno, Class<?> aClass) {
        return null;
    }
    
	@Override
    public Parser<?> getParser(MyAnno myAnno, Class<?> aClass) {
        return getFormatter(myAnno);
    }
	private Formatter<String> getFormatter(MyAnno myAnno){
        return new MyFormatter();
    }
}
  • 定义 Formatter
    这里自定义转换的逻辑
public class MyFormatter implements Formatter<String> {
	@Override
    public String parse(String s, Locale locale) throws ParseException {
        return “¥”+s;
    }
	@Override
    public String print(String s, Locale locale) {
        return null;
    }
}
  • 注册
@Component
public class MyWebMvcSupport extends WebMvcConfigurationSupport {

    @Override
    protected void addFormatters(FormatterRegistry registry) {
        registry.addFormatterForFieldAnnotation(new MyAnnotationFormatterFactory());
    }
}
  • 使用
@Data
public class User {

	private String name;
	
	@MyAnno
    private String money;
}

版权声明:本文为weixin_38417148原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。