springboot 自定义 formatter 注解

Posted jc1997

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot 自定义 formatter 注解相关的知识,希望对你有一定的参考价值。

我们在开发时会用到 @DateTimeFormat 这个注解。

对于从前台接收时间日期格式 很方便。

但如果前台传来的是 "是" “否” “有” "无" 这样的中文时,想要转成boolean 类型时,没有对应的注解,下面我们自己来实现这个注解。

本例基于

springboot 2.x

jdk1.8

首先,创建一个注解

技术图片
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE)
public @interface BooleanFormat 
    String[] trueTag() default ;
技术图片

其中 trueTag  用于接收参数

比如我们想将 “YES”,“OK” 这样的字符串转成 true ,那需要在参数中进行表示 。

然后,我们建一个formatter类,帮助我们来实现具体的转换规则。

技术图片
 1 public class BooleanFormatter implements Formatter<Boolean> 
 2 
 3     private String[] trueTag;
 4 
 5 
 6     @Override
 7     public Boolean parse(String s, Locale locale) throws ParseException 
 8         if (trueTag != null && trueTag.length > 0) 
 9             return Arrays.asList(trueTag).contains(s);
10          else 
11             switch (s.toLowerCase()) 
12                 case "true":
13                 case "1":
14                 case "是":
15                 case "有":
16                     return true;
17             
18         
19         return false;
20     
21 
22     @Override
23     public String print(Boolean aBoolean, Locale locale) 
24         return aBoolean ? "true" : "false";
25     
26 
27     public String[] getTrueTag() 
28         return trueTag;
29     
30 
31     public void setTrueTag(String[] trueTag) 
32         this.trueTag = trueTag;
33     
34 
技术图片

第3行的属性用来接收注解上传过来的参数。

第7行的方法是用于将字符串转成BOOLEAN类型。

第23行的方法用于将BOOLEAN类型转成字符串。

 

完成上面的代码后,我们还需要将我们自定义的类型转类注册到spring中。

先定义一下factory类。

技术图片
 1 public class BooleanFormatAnnotationFormatterFactory extends EmbeddedValueResolutionSupport
 2         implements AnnotationFormatterFactory<BooleanFormat> 
 3 
 4 
 5     @Override
 6     public Set<Class<?>> getFieldTypes() 
 7         return new HashSet<Class<?>>()
 8             add(String.class);
 9             add(Boolean.class);
10         ;
11 
12     
13 
14     @Override
15     public Printer<?> getPrinter(BooleanFormat booleanFormat, Class<?> aClass) 
16         BooleanFormatter booleanFormatter = new BooleanFormatter();
17         booleanFormatter.setTrueTag(booleanFormat.trueTag());
18         return booleanFormatter;
19     
20 
21     @Override
22     public Parser<?> getParser(BooleanFormat booleanFormat, Class<?> aClass) 
23         BooleanFormatter booleanFormatter = new BooleanFormatter();
24         booleanFormatter.setTrueTag(booleanFormat.trueTag());
25         return booleanFormatter;
26     
27 
技术图片

 

 

然后将这个类注册到spring中。

技术图片
 1 @Configuration
 2 public class WebConfigurer implements WebMvcConfigurer 
 3 
 4     
 5 
 6     @Override
 7     public void addFormatters(FormatterRegistry registry) 
 8         registry.addFormatterForFieldAnnotation(new BooleanFormatAnnotationFormatterFactory());
 9     
10 
11     
12 
技术图片

接下来,就可以使用这个注解了。

在你的pojo类中:

1 @Data
2 public class DemoDto 
3     @BooleanFormat(trueTag = "YES","OK","是")
4     private boolean exists;
5 

以上是关于springboot 自定义 formatter 注解的主要内容,如果未能解决你的问题,请参考以下文章

echarts tooltip 自定义formatter怎么设置颜色

echarts tooltip 自定义formatter怎么设置颜色?

记录自定义元素 Zend Log Formatter XML

Js + Bootstrap Table + adminlte - 自定义formatter,在表格内添加箭头样式,调整列宽

Python使用matplotlib函数subplot可视化多个不同颜色的折线图使用set_major_formatter函数自定义设置y轴数值标签格式为百分比

echarts中常用的一些方法(formatter)