fix bug#I3AXIJ

This commit is contained in:
Looly
2021-03-11 17:10:02 +08:00
parent 5cdbd16c0b
commit 511f688d1e
4 changed files with 65 additions and 26 deletions

View File

@@ -249,12 +249,14 @@ public class BeanDesc implements Serializable {
* @return 是否匹配
*/
private boolean isMatchGetter(String methodName, String fieldName, boolean isBooleanField, boolean ignoreCase) {
// 全部转为小写,忽略大小写比较
final String handledFieldName;
if (ignoreCase) {
// 全部转为小写,忽略大小写比较
methodName = methodName.toLowerCase();
fieldName = fieldName.toLowerCase();
handledFieldName = fieldName.toLowerCase();
fieldName = handledFieldName;
} else {
fieldName = StrUtil.upperFirst(fieldName);
handledFieldName = StrUtil.upperFirst(fieldName);
}
if (false == methodName.startsWith("get") && false == methodName.startsWith("is")) {
@@ -271,12 +273,12 @@ public class BeanDesc implements Serializable {
if (fieldName.startsWith("is")) {
// 字段已经是is开头
if (methodName.equals(fieldName) // isName -》 isName
|| methodName.equals("get" + fieldName)// isName -》 getIsName
|| methodName.equals("is" + fieldName)// isName -》 isIsName
|| methodName.equals("get" + handledFieldName)// isName -》 getIsName
|| methodName.equals("is" + handledFieldName)// isName -》 isIsName
) {
return true;
}
} else if (methodName.equals("is" + fieldName)) {
} else if (methodName.equals("is" + handledFieldName)) {
// 字段非is开头 name -》 isName
return true;
}
@@ -304,9 +306,15 @@ public class BeanDesc implements Serializable {
* @return 是否匹配
*/
private boolean isMatchSetter(String methodName, String fieldName, boolean isBooleanField, boolean ignoreCase) {
// 全部转为小写,忽略大小写比较
methodName = methodName.toLowerCase();
fieldName = fieldName.toLowerCase();
final String handledFieldName;
if (ignoreCase) {
// 全部转为小写,忽略大小写比较
methodName = methodName.toLowerCase();
handledFieldName = fieldName.toLowerCase();
fieldName = handledFieldName;
} else {
handledFieldName = StrUtil.upperFirst(fieldName);
}
// 非标准Setter方法跳过
if (false == methodName.startsWith("set")) {
@@ -314,7 +322,7 @@ public class BeanDesc implements Serializable {
}
// 针对Boolean类型特殊检查
if (isBooleanField && fieldName.startsWith("is")) {
if (isBooleanField && handledFieldName.startsWith("is")) {
// 字段是is开头
if (methodName.equals("set" + StrUtil.removePrefix(fieldName, "is"))// isName -》 setName
|| methodName.equals("set" + fieldName)// isName -》 setIsName
@@ -327,4 +335,4 @@ public class BeanDesc implements Serializable {
return methodName.equals("set" + fieldName);
}
// ------------------------------------------------------------------------------------------------------ Private method end
}
}

View File

@@ -5,7 +5,7 @@ import org.junit.Test;
/**
* {@link BeanDesc} 单元测试类
*
*
* @author looly
*
*/
@@ -20,48 +20,48 @@ public class BeanDescTest {
Assert.assertEquals("getAge", desc.getGetter("age").getName());
Assert.assertEquals("setAge", desc.getSetter("age").getName());
Assert.assertEquals(1, desc.getSetter("age").getParameterTypes().length);
Assert.assertEquals(int.class, desc.getSetter("age").getParameterTypes()[0]);
Assert.assertSame(int.class, desc.getSetter("age").getParameterTypes()[0]);
}
@Test
public void propDescTes2() {
BeanDesc desc = BeanUtil.getBeanDesc(User.class);
PropDesc prop = desc.getProp("name");
Assert.assertEquals("name", prop.getFieldName());
Assert.assertEquals("getName", prop.getGetter().getName());
Assert.assertEquals("setName", prop.getSetter().getName());
Assert.assertEquals(1, prop.getSetter().getParameterTypes().length);
Assert.assertEquals(String.class, prop.getSetter().getParameterTypes()[0]);
Assert.assertSame(String.class, prop.getSetter().getParameterTypes()[0]);
}
@Test
public void propDescOfBooleanTest() {
BeanDesc desc = BeanUtil.getBeanDesc(User.class);
Assert.assertEquals("isAdmin", desc.getGetter("isAdmin").getName());
Assert.assertEquals("setAdmin", desc.getSetter("isAdmin").getName());
Assert.assertEquals("isGender", desc.getGetter("gender").getName());
Assert.assertEquals("setGender", desc.getSetter("gender").getName());
}
@Test
public void propDescOfBooleanTest2() {
BeanDesc desc = BeanUtil.getBeanDesc(User.class);
Assert.assertEquals("isIsSuper", desc.getGetter("isSuper").getName());
Assert.assertEquals("setIsSuper", desc.getSetter("isSuper").getName());
}
@Test
public void getSetTest() {
BeanDesc desc = BeanUtil.getBeanDesc(User.class);
User user = new User();
desc.getProp("name").setValue(user, "张三");
Assert.assertEquals("张三", user.getName());
Object value = desc.getProp("name").getValue(user);
Assert.assertEquals("张三", value);
}
@@ -101,7 +101,7 @@ public class BeanDescTest {
public void setAdmin(boolean isAdmin) {
this.isAdmin = isAdmin;
}
public boolean isIsSuper() {
return isSuper;
}