diff --git a/src/main/java/com/alibaba/fastjson/parser/deserializer/JavaBeanDeserializer.java b/src/main/java/com/alibaba/fastjson/parser/deserializer/JavaBeanDeserializer.java index de7466d4e2..83a0b6448f 100644 --- a/src/main/java/com/alibaba/fastjson/parser/deserializer/JavaBeanDeserializer.java +++ b/src/main/java/com/alibaba/fastjson/parser/deserializer/JavaBeanDeserializer.java @@ -1307,16 +1307,16 @@ public FieldDeserializer smartMatch(String key, int[] setFlags) { } // smartMatchHashArrayMapping - long smartKeyHash = TypeUtils.fnv1a_64_extract(key); + long smartKeyHash = TypeUtils.fnv1a_64_lower(key); int pos = Arrays.binarySearch(smartMatchHashArray, smartKeyHash); if (pos < 0) { - long smartKeyHash1 = TypeUtils.fnv1a_64_lower(key); + long smartKeyHash1 = TypeUtils.fnv1a_64_extract(key); pos = Arrays.binarySearch(smartMatchHashArray, smartKeyHash1); } boolean is = false; if (pos < 0 && (is = key.startsWith("is"))) { - smartKeyHash = TypeUtils.fnv1a_64_lower(key.substring(2)); + smartKeyHash = TypeUtils.fnv1a_64_extract(key.substring(2)); pos = Arrays.binarySearch(smartMatchHashArray, smartKeyHash); } diff --git a/src/main/java/com/alibaba/fastjson/util/FieldInfo.java b/src/main/java/com/alibaba/fastjson/util/FieldInfo.java index 920f4d119c..545f7c3267 100644 --- a/src/main/java/com/alibaba/fastjson/util/FieldInfo.java +++ b/src/main/java/com/alibaba/fastjson/util/FieldInfo.java @@ -255,9 +255,9 @@ public FieldInfo(String name, // private long nameHashCode64(String name, JSONField annotation) { if (annotation != null && annotation.name().length() != 0) { - return TypeUtils.fnv1a_64_extract(name); + return TypeUtils.fnv1a_64_lower(name); } - return TypeUtils.fnv1a_64_lower(name); + return TypeUtils.fnv1a_64_extract(name); } protected char[] genFieldNameChars() { diff --git a/src/main/java/com/alibaba/fastjson/util/TypeUtils.java b/src/main/java/com/alibaba/fastjson/util/TypeUtils.java index c7a622855c..a7625a8ec2 100644 --- a/src/main/java/com/alibaba/fastjson/util/TypeUtils.java +++ b/src/main/java/com/alibaba/fastjson/util/TypeUtils.java @@ -2901,7 +2901,7 @@ public static float parseFloat(String str) { return Float.parseFloat(str); } - public static long fnv1a_64_lower(String key){ + public static long fnv1a_64_extract(String key){ long hashCode = 0xcbf29ce484222325L; for(int i = 0; i < key.length(); ++i){ char ch = key.charAt(i); @@ -2917,10 +2917,13 @@ public static long fnv1a_64_lower(String key){ return hashCode; } - public static long fnv1a_64_extract(String key){ + public static long fnv1a_64_lower(String key){ long hashCode = 0xcbf29ce484222325L; for(int i = 0; i < key.length(); ++i){ char ch = key.charAt(i); + if(ch >= 'A' && ch <= 'Z'){ + ch = (char) (ch + 32); + } hashCode ^= ch; hashCode *= 0x100000001b3L; } diff --git a/src/test/java/com/alibaba/json/bvt/issue_3300/Issue3313.java b/src/test/java/com/alibaba/json/bvt/issue_3300/Issue3313.java new file mode 100644 index 0000000000..a50faa25ad --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/issue_3300/Issue3313.java @@ -0,0 +1,29 @@ +package com.alibaba.json.bvt.issue_3300; + +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.annotation.JSONField; +import junit.framework.TestCase; +import lombok.Data; +import org.springframework.util.Assert; + +/** + * @Author :Nanqi + * @Date :Created in 21:54 2020/6/30 + */ +public class Issue3313 extends TestCase { + public void test_for_issue() throws Exception { + String jsonStr = "{\"NAME\":\"nanqi\",\"age\":18}"; + Model model = JSONObject.parseObject(jsonStr, Model.class); + Assert.notNull(model.getAGe()); + Assert.notNull(model.getName()); + } + + @Data + static class Model { + @JSONField(name = "NaMe") + private String name; + + @JSONField(name = "age") + private Integer aGe; + } +}