场景
想要自定义注解,对某些特定字段属性按照自己想要的风格类型进行转换;例如:想把金额前添加货币¥符号,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版权协议,转载请附上原文出处链接和本声明。