diff --git a/CHANGELOG.md b/CHANGELOG.md index ab6e618d8..5cf74e1e8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ * 【extra 】 QRConfig中添加qrVersion属性(pr#1068@Github) * 【core 】 ArrayUtil增加equals方法 * 【core 】 BeanDesc增加方法 +* 【core 】 增加@PropIgnore注解(issue#I1U846@Gitee) ### Bug修复 * 【core 】 重新整理农历节假日,解决一个pr过来的玩笑导致的问题 diff --git a/hutool-core/src/main/java/cn/hutool/core/annotation/Ignore.java b/hutool-core/src/main/java/cn/hutool/core/annotation/PropIgnore.java similarity index 57% rename from hutool-core/src/main/java/cn/hutool/core/annotation/Ignore.java rename to hutool-core/src/main/java/cn/hutool/core/annotation/PropIgnore.java index 5c9b05aff..1948ac1cc 100644 --- a/hutool-core/src/main/java/cn/hutool/core/annotation/Ignore.java +++ b/hutool-core/src/main/java/cn/hutool/core/annotation/PropIgnore.java @@ -7,7 +7,8 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** - * 忽略注解,使用此注解的字段等会被忽略,主要用于Bean拷贝、Bean转Map等 + * 属性忽略注解,使用此注解的字段等会被忽略,主要用于Bean拷贝、Bean转Map等
+ * 此注解应用于字段时,忽略读取和设置属性值,应用于setXXX方法忽略设置值,应用于getXXX忽略读取值 * * @author Looly * @since 5.4.2 @@ -15,6 +16,6 @@ import java.lang.annotation.Target; @Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER}) -public @interface Ignore { +public @interface PropIgnore { } diff --git a/hutool-core/src/main/java/cn/hutool/core/bean/BeanDesc.java b/hutool-core/src/main/java/cn/hutool/core/bean/BeanDesc.java index 74d1e761e..98d6a8051 100644 --- a/hutool-core/src/main/java/cn/hutool/core/bean/BeanDesc.java +++ b/hutool-core/src/main/java/cn/hutool/core/bean/BeanDesc.java @@ -1,7 +1,7 @@ package cn.hutool.core.bean; import cn.hutool.core.annotation.AnnotationUtil; -import cn.hutool.core.annotation.Ignore; +import cn.hutool.core.annotation.PropIgnore; import cn.hutool.core.convert.Convert; import cn.hutool.core.lang.Assert; import cn.hutool.core.map.CaseInsensitiveMap; @@ -566,33 +566,33 @@ public class BeanDesc implements Serializable { } /** - * 检查字段是否被忽略读,通过{@link Ignore} 注解完成,规则为: + * 检查字段是否被忽略读,通过{@link PropIgnore} 注解完成,规则为: *
-		 *     1. 在字段上有{@link Ignore} 注解
-		 *     2. 在getXXX方法上有{@link Ignore} 注解
+		 *     1. 在字段上有{@link PropIgnore} 注解
+		 *     2. 在getXXX方法上有{@link PropIgnore} 注解
 		 * 
* * @return 是否忽略读 * @since 5.4.2 */ public boolean isIgnoreGet() { - return AnnotationUtil.hasAnnotation(this.field, Ignore.class) - || AnnotationUtil.hasAnnotation(this.getter, Ignore.class); + return AnnotationUtil.hasAnnotation(this.field, PropIgnore.class) + || AnnotationUtil.hasAnnotation(this.getter, PropIgnore.class); } /** - * 检查字段是否被忽略写,通过{@link Ignore} 注解完成,规则为: + * 检查字段是否被忽略写,通过{@link PropIgnore} 注解完成,规则为: *
-		 *     1. 在字段上有{@link Ignore} 注解
-		 *     2. 在setXXX方法上有{@link Ignore} 注解
+		 *     1. 在字段上有{@link PropIgnore} 注解
+		 *     2. 在setXXX方法上有{@link PropIgnore} 注解
 		 * 
* * @return 是否忽略写 * @since 5.4.2 */ public boolean isIgnoreSet() { - return AnnotationUtil.hasAnnotation(this.field, Ignore.class) - || AnnotationUtil.hasAnnotation(this.setter, Ignore.class); + return AnnotationUtil.hasAnnotation(this.field, PropIgnore.class) + || AnnotationUtil.hasAnnotation(this.setter, PropIgnore.class); } //------------------------------------------------------------------------------------ Private method start diff --git a/hutool-json/src/test/java/cn/hutool/json/JSONObjectTest.java b/hutool-json/src/test/java/cn/hutool/json/JSONObjectTest.java index 3224ccf21..cc5583dad 100644 --- a/hutool-json/src/test/java/cn/hutool/json/JSONObjectTest.java +++ b/hutool-json/src/test/java/cn/hutool/json/JSONObjectTest.java @@ -1,6 +1,7 @@ package cn.hutool.json; import cn.hutool.core.annotation.Alias; +import cn.hutool.core.annotation.PropIgnore; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DatePattern; @@ -268,7 +269,9 @@ public class JSONObjectTest { */ @Test public void toBeanTest7() { - String jsonStr = " {\"result\":{\"phone\":\"15926297342\",\"appKey\":\"e1ie12e1ewsdqw1\",\"secret\":\"dsadadqwdqs121d1e2\",\"message\":\"hello world\"},\"code\":100,\"message\":\"validate message\"}"; + String jsonStr = " {\"result\":{\"phone\":\"15926297342\",\"appKey\":\"e1ie12e1ewsdqw1\"," + + "\"secret\":\"dsadadqwdqs121d1e2\",\"message\":\"hello world\"},\"code\":100,\"" + + "message\":\"validate message\"}"; ResultDto dto = JSONUtil.toBean(jsonStr, ResultDto.class); Assert.assertEquals("validate message", dto.getMessage()); } @@ -466,6 +469,9 @@ public class JSONObjectTest { final JSONObject parse = JSONUtil.parseObj(sameNameBean); Assert.assertEquals("123", parse.getStr("username")); Assert.assertEquals("abc", parse.getStr("userName")); + + // 测试ignore注解是否有效 + Assert.assertNull(parse.getStr("fieldToIgnore")); } /** @@ -477,14 +483,18 @@ public class JSONObjectTest { public static class SameNameBean { private final String username = "123"; private final String userName = "abc"; - public String getUsername() { return username; } + @PropIgnore + private final String fieldToIgnore = "sfdsdads"; public String getUserName() { return userName; } + public String getFieldToIgnore(){ + return this.fieldToIgnore; + } } }