Guava 小技巧三则
最近在赶一个项目,由于D瓜哥也算是半个 Google 粉。所以,对 Google 出品的 Guava 项目可以说情有独钟。最近使用使用中遇到三个问题以及使用 Guava 的解决办法,D瓜哥觉得挺有代表性的。所以简单记录一下。
Map
相关的 Joiner
和 Splitter
第一个问题:D瓜哥需要从 URL 中获取相关请求的参数,并且将其转化成 Key-Value
形式放到 Map
对象,方便后续操作。
URL 中,参数的格式大家应该都了解:http://www.diguage.com?userName=diguage&sex=fale
。以 ?
分割后,后面的就是参数。如果自己手动写,还有一个一个分割,实在是懒得动手了。其实 Guava中内置了非常方便的方法来解决这个问题。代码如下:
int paramSeparater = url.indexOf("?"); String host = url.substring(0, paramSeparater); String params = fromUrl.substring(paramSeparater + 1); Map<String, String> paramMap = Maps.newHashMap(); Map<String, String> paramMap = Splitter.on("&").withKeyValueSeparator("=").split(params);
反过来,我们可能还需有将 Map
对象转化成 URL 的参数,来拼接出一个带参数的 URL。Guava 中也有非常方便的相关方法。代码如下:
Map<String, String> paramMap = Maps.newHashMap(); paramMap.put("userName", "diguage"); paramMap.put("webSite", "http://www.diguage.com/"); String url = url + "?" + Joiner.on("&").withKeyValueSeparator("=").join(paramMap);
感觉怎么样,是不是特别方便?
字符串格式转换
我们的项目中,使用了 Spring JdbcTemplate,并基于这个这个东东写了一个 BaseDao
,再结合注解,就可以获取表名和字段名。为了统一,规定将数据表以及字段的多个字母以下划线分割。大家都知道,Java 中类名以及属性名,都是驼峰命名法。那么就需要一个转化。 Guava 也提供了很方便的方法。代码如下:
String tableName = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, clazz.getSimpleName());
在上述代码中, CaseFormat
中设定了几个常用的格式:
-
LOWER_CAMEL
– 以小写字母开头的驼峰命名规则。例如:lowerCamel
。这个规则符合表示 Java 属性以及 Java 方法的命名规则。 -
LOWER_HYPHEN
– 将单词的小写形式以连接符(-
)连接的。例如:lower-hyphen
。 -
LOWER_UNDERSCORE
– 将单词的小写形式以连接符(_
)连接的。例如:lower_underscore
。 -
UPPER_CAMEL
– 以大写字母开头的驼峰命名规则。例如:UpperCamel
。这个规则符合表示 Java 或 C++ 类名的命名规则。 -
UPPER_UNDERSCORE
– 将单词的大写形式以连接符(_
)连接的。例如:UPPER_UNDERSCORE
。这个规则符合表示 Java 或 C++ 常量的命名规则。
组合使用这几个规则,可以方便地进行字符串形式的转换。例如,将上面的表名转化成类名:
String className = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, tableName);
URL 编码
最后一个问题:需要将一个当前 URL 传递到下一个请求中,方便做跳转回来。作为参数传递,肯定需要对 URL 编码,否则作为参数的 URL 的参数就可能丢失了。 Guava 中通过也可以很好的支持:
String currentUrl = UrlEscapers.urlFormParameterEscaper().escape("http://www.diguage.com?userName=diguage");
最后,再吐嘈一下 Guava: Guava 提供了很好支持 URL 的编码;但是,却没有提供 URL 的解码工具类。这不能不说是美中不足啊。
参考资料
原文链接:https://wordpress.diguage.com/archives/143.html
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。