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

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

在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有值时,一切正常。

 

参考:

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

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

==>如有问题,请联系我:easonjim#163.com,或者下方发表评论。<==

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

你可能感兴趣的文章
svn on windows 修改文件大小写
查看>>
click事件触发也有失灵的时候?
查看>>
Change Log应该怎么写?
查看>>
鲜为人知的HTTP协议头字段详解大全
查看>>
机器学习数学知识
查看>>
图解SQL的Join
查看>>
配置多个git远程仓库的ssh-Key切换
查看>>
nginx+keepalived实现nginx双主的高可用
查看>>
流处理和批处理框架的异同
查看>>
CMSampleBufferRef转UIImage
查看>>
Redis异常提示: OOM command not allowed when used memory > ‘maxmemory’
查看>>
设计模式什么的哪有那么神秘 ----第二集 函数传值
查看>>
linux常用查看硬件设备信息命令
查看>>
IP数据包的分析实例
查看>>
HTML中head头结构
查看>>
Python 后台基于 PackerNg 格式动态生成 APK 渠道包
查看>>
笔记:非阻塞读终端和等待超时
查看>>
sublime2 text编辑器最新使用技巧
查看>>
Ionic3--禁用页面返回按钮
查看>>
软件版本定义【转、原】
查看>>