博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring实现封装自定义注解@Trimmed清除字符串前后的空格
阅读量:6173 次
发布时间:2019-06-21

本文共 3273 字,大约阅读时间需要 10 分钟。

在Spring中实现字符串清除的方法有很多,原生方法String自带trim()方法,或者使用StringUtils提供的trim...方法。

通常可以将上面的方式封装成自定义注解的形式去实现来节省更多的业务代码。

Trimmed.java:

import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * 清除字符串前后的空格 */@Target(value = { ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER })@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface Trimmed {    public static enum TrimmerType {        SIMPLE, ALL_WHITESPACES, EXCEPT_LINE_BREAK;    }    TrimmerType value() default TrimmerType.ALL_WHITESPACES;}

TrimmedAnnotationFormatterFactory.java:

import java.text.ParseException;import java.util.Collections;import java.util.HashMap;import java.util.HashSet;import java.util.Locale;import java.util.Map;import java.util.Set;import java.util.regex.Pattern;import org.springframework.format.AnnotationFormatterFactory;import org.springframework.format.Formatter;import org.springframework.format.Parser;import org.springframework.format.Printer;import Trimmed.TrimmerType;/** * 清除字符串前后的空格自定义注解格式工厂 */public class TrimmedAnnotationFormatterFactory implements AnnotationFormatterFactory
{ private static final Map
TRIMMER_FORMATTER_MAP; static { TrimmerType[] values = Trimmed.TrimmerType.values(); Map
map = new HashMap
(values.length); for (TrimmerType type : values) { map.put(type, new TrimmerFormatter(type)); } TRIMMER_FORMATTER_MAP = Collections.unmodifiableMap(map); } @Override public Set
> getFieldTypes() { Set
> fieldTypes = new HashSet
>(1, 1); fieldTypes.add(String.class); return fieldTypes; } @Override public Parser
getParser(Trimmed annotation, Class
fieldType) { return TRIMMER_FORMATTER_MAP.get(annotation.value()); } @Override public Printer
getPrinter(Trimmed annotation, Class
fieldType) { return TRIMMER_FORMATTER_MAP.get(annotation.value()); } private static class TrimmerFormatter implements Formatter
{ private static final Pattern PATTERN_WHITESPACES = Pattern.compile("\\s+"); private static final Pattern PATTERN_WHITESPACES_WITH_LINE_BREAK = Pattern.compile("\\s*\\n\\s*"); private static final Pattern PATTERN_WHITESPACES_EXCEPT_LINE_BREAK = Pattern.compile("[\\s&&[^\\n]]+"); private final TrimmerType type; public TrimmerFormatter(TrimmerType type) { if (type == null) throw new NullPointerException(); this.type = type; } @Override public String print(String object, Locale locale) { return object; } @Override public String parse(String text, Locale locale) throws ParseException { text = text.trim(); switch (type) { case ALL_WHITESPACES: return PATTERN_WHITESPACES.matcher(text).replaceAll(" "); case EXCEPT_LINE_BREAK: return PATTERN_WHITESPACES_EXCEPT_LINE_BREAK .matcher(PATTERN_WHITESPACES_WITH_LINE_BREAK.matcher(text).replaceAll("\n")).replaceAll(" "); case SIMPLE: return text; default: // not possible throw new AssertionError(); } } }}

集成方法参考:

上面注解的使用方法直接是在方法字段使用@Trimmed即可。支持属性和方法上的字段注入。

使用注意:

1、如果用了@RequestParam(defaultValue = "")时,会导致为null,但是如果defaultValue有值时,一切正常。

 

参考:

(以上的封装来自此篇文章)

实现自定义注解的方法收集:

转载地址:http://wutba.baihongyu.com/

你可能感兴趣的文章
web 性能优化指南阅读笔记
查看>>
课堂练习——找1
查看>>
php curl函数以及可设置的参数
查看>>
(1/24) 认识webpack
查看>>
控制多线程高并发访问数据共享
查看>>
Linux SSH 远程登录错误解决办法 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
查看>>
canvas交互之addHitRegion()接口的使用
查看>>
Deprecated: Assigning the return value of new by reference is deprecated in……【解决方法】
查看>>
Deprecated: Function eregi() is deprecated in ……【解决方法】
查看>>
JS实现动画方向切换效果(包括:撞墙反弹,暂停继续左右运动等)
查看>>
定时任务发展史(二)
查看>>
hdu 5172 GTY's gay friends 线段树
查看>>
C二维数组练习
查看>>
实验十——一维数组的定义及引用
查看>>
【转载】Spring3 MVC的DEMO
查看>>
jquery取对象数组元素的错误方式
查看>>
秒杀的活动设计方案
查看>>
【python3的进阶之路二】因特网客户端编程
查看>>
Python Day43
查看>>
PHP 构造函数
查看>>