diff --git a/src/main/java/org/redkale/util/MultiHashKeys.java b/src/main/java/org/redkale/util/MultiHashKeys.java index c73b60d77..879aad788 100644 --- a/src/main/java/org/redkale/util/MultiHashKeys.java +++ b/src/main/java/org/redkale/util/MultiHashKeys.java @@ -29,7 +29,7 @@ class MultiHashKeys { for (int i = 0; i < chars.length; i++) { char ch = chars[i]; if (ch == '{') { - if (paraming || i < 1) { + if (paraming) { throw new RedkaleException(MultiHashKey.class.getSimpleName() + " parse error, key: " + key); } if (last == '#') { @@ -43,15 +43,12 @@ class MultiHashKeys { sb.deleteCharAt(sb.length() - 1); sb.append(ch); } else { - throw new RedkaleException(MultiHashKey.class.getSimpleName() + " parse error, key: " + key); + sb.append(ch); } - } else if (last == '\\' && ch == '}') { + } else if (ch == '}' && last == '\\') { sb.deleteCharAt(sb.length() - 1); sb.append(ch); - } else if (ch == '}') { - if (!paraming) { - throw new RedkaleException(MultiHashKey.class.getSimpleName() + " parse error, key: " + key); - } + } else if (ch == '}' && paraming) { String name = sb.toString(); sb.delete(0, sb.length()); if (name.indexOf('.') > 0) { @@ -65,6 +62,9 @@ class MultiHashKeys { } last = ch; } + if (sb.length() > 0) { + list.add(new StringKey(sb.toString())); + } if (list.size() == 1) { return list.get(0); } diff --git a/src/test/java/org/redkale/test/util/MultiHashKeyTest.java b/src/test/java/org/redkale/test/util/MultiHashKeyTest.java index 63ad86f64..9531eeb12 100644 --- a/src/test/java/org/redkale/test/util/MultiHashKeyTest.java +++ b/src/test/java/org/redkale/test/util/MultiHashKeyTest.java @@ -86,7 +86,11 @@ public class MultiHashKeyTest { @Test public void run6() throws Exception { - + String[] paramNames = {"map", "id"}; + String key = "{key_#{map.name}_#{id}_#{map.index}}"; + MultiHashKey rs = MultiHashKey.create(paramNames, key); + Map map = Utility.ofMap("name", "me", "index", 123); + Assertions.assertEquals("{key_me_123_123}", rs.keyFor(map, 123)); } @Test