我看到key好像只能诸如key="#id"这样,取参数值或者参数的field或者类的信息,我想自定义一些字符串,譬如listAll()方法的key定义为诸如“all”,有可能吗?
我看到key好像只能诸如key="#id"这样,取参数值或者参数的field或者类的信息,我想自定义一些字符串,譬如listAll()方法的key定义为诸如“all”,有可能吗?
什么字符可以用做Key取决于Cache具体实现, 以memcache为例, 最长250字符, 不能有空白字符(空格,换行,tab)等
参考下面的代码
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
public class CacheUtils {
private static final int MAX_KEY_LENGTH = 250;
public static void validateKey(String key) {
byte[] keyBytes = key.getBytes();
if (keyBytes.length > MAX_KEY_LENGTH) {
throw new IllegalArgumentException("Key is too long (maxlen = "
+ MAX_KEY_LENGTH + ")");
}
if (keyBytes.length == 0) {
throw new IllegalArgumentException(
"Key must contain at least one character.");
}
// Validate the key
for (byte b : keyBytes) {
if (b == ' ' || b == '\n' || b == '\r' || b == 0) {
throw new IllegalArgumentException(
"Key contains invalid characters: ``" + key + "''");
}
}
}
/**
* @see <a href="http://blog.csdn.net/xiaojianpitt/article/details/7332950">memcache对键的要求 </a>
* @param src 输入
* @return 返回符合memcached要求的字符标识
*/
public static String makeValidKey(String src){
return StringUtils.mid(src.replaceAll("\\p{Cntrl}]|\\p{Space}|<null>", ""),0, MAX_KEY_LENGTH);
}
public static String makeValidKey(Object src){
if(src instanceof Map){
return makeValidKey(ConvertUtils.mapToString((Map<String, ?>)src));
}
if(src instanceof List){
return makeValidKey(ConvertUtils.listToString((List<?>)src));
}
return makeValidKey(ToStringBuilder.reflectionToString(src, ToStringStyle.SIMPLE_STYLE));
}
}
15 回答8.4k 阅读
8 回答6.2k 阅读
3 回答3.6k 阅读✓ 已解决
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.6k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
key="#root.methodName"
就是方法名