11package me .chanjar .weixin .common .util ;
22
3- import java .lang .reflect .Field ;
4- import java .util .ArrayList ;
5- import java .util .Arrays ;
6- import java .util .List ;
7- import java .util .Map ;
8-
9- import org .slf4j .Logger ;
10- import org .slf4j .LoggerFactory ;
11-
123import com .google .common .collect .Lists ;
134import com .google .common .collect .Maps ;
145import com .thoughtworks .xstream .annotations .XStreamAlias ;
15-
166import me .chanjar .weixin .common .annotation .Required ;
177import me .chanjar .weixin .common .bean .result .WxError ;
188import me .chanjar .weixin .common .exception .WxErrorException ;
9+ import org .apache .commons .lang3 .StringUtils ;
10+ import org .slf4j .Logger ;
11+ import org .slf4j .LoggerFactory ;
12+
13+ import java .lang .reflect .Field ;
14+ import java .util .ArrayList ;
15+ import java .util .Arrays ;
16+ import java .util .List ;
17+ import java .util .Map ;
1918
2019/**
2120 * <pre>
2524 * </pre>
2625 */
2726public class BeanUtils {
28- private static Logger log = LoggerFactory .getLogger (BeanUtils .class );
27+ private static Logger log = LoggerFactory .getLogger (BeanUtils .class );
2928
3029 /**
3130 * 检查bean里标记为@Required的field是否为空,为空则抛异常
31+ *
3232 * @param bean 要检查的bean对象
3333 * @throws WxErrorException
3434 */
3535 public static void checkRequiredFields (Object bean ) throws WxErrorException {
36- List <String > nullFields = Lists .newArrayList ();
36+ List <String > requiredFields = Lists .newArrayList ();
3737
38- List <Field > fields = new ArrayList <>( Arrays .asList (bean .getClass ().getDeclaredFields ()));
38+ List <Field > fields = new ArrayList <>(Arrays .asList (bean .getClass ().getDeclaredFields ()));
3939 fields .addAll (Arrays .asList (bean .getClass ().getSuperclass ().getDeclaredFields ()));
4040 for (Field field : fields ) {
4141 try {
4242 boolean isAccessible = field .isAccessible ();
4343 field .setAccessible (true );
44- if (field .isAnnotationPresent (Required .class )
45- && field .get (bean ) == null ) {
46- nullFields .add (field .getName ());
44+ if (field .isAnnotationPresent (Required .class )) {
45+ if (field .get (bean ) == null || (field .get (bean ) instanceof String && StringUtils .isBlank (field .get (bean ).toString ()))) {
46+ //两种情况,一种是值为null,另外一种情况是类型为字符串,但是字符串内容为空的,都认为是没有提供值
47+ requiredFields .add (field .getName ());
48+ }
4749 }
4850 field .setAccessible (isAccessible );
4951 } catch (SecurityException | IllegalArgumentException
@@ -52,43 +54,43 @@ public static void checkRequiredFields(Object bean) throws WxErrorException {
5254 }
5355 }
5456
55- if (!nullFields .isEmpty ()) {
56- String msg = "必填字段 " + nullFields + " 必须提供值" ;
57+ if (!requiredFields .isEmpty ()) {
58+ String msg = "必填字段 " + requiredFields + " 必须提供值" ;
5759 log .debug (msg );
5860 throw new WxErrorException (WxError .newBuilder ().setErrorMsg (msg ).build ());
5961 }
6062 }
6163
62- /**
63- * 将bean按照@XStreamAlias标识的字符串内容生成以之为key的map对象
64- *
65- * @param bean 包含@XStreamAlias的xml bean对象
66- * @return map对象
67- */
68- public static Map <String , String > xmlBean2Map (Object bean ) {
69- Map <String , String > result = Maps .newHashMap ();
70- List <Field > fields = new ArrayList <>(Arrays .asList (bean .getClass ().getDeclaredFields ()));
71- fields .addAll (Arrays .asList (bean .getClass ().getSuperclass ().getDeclaredFields ()));
72- for (Field field : fields ) {
73- try {
74- boolean isAccessible = field .isAccessible ();
75- field .setAccessible (true );
76- if (field .get (bean ) == null ) {
77- field .setAccessible (isAccessible );
78- continue ;
79- }
64+ /**
65+ * 将bean按照@XStreamAlias标识的字符串内容生成以之为key的map对象
66+ *
67+ * @param bean 包含@XStreamAlias的xml bean对象
68+ * @return map对象
69+ */
70+ public static Map <String , String > xmlBean2Map (Object bean ) {
71+ Map <String , String > result = Maps .newHashMap ();
72+ List <Field > fields = new ArrayList <>(Arrays .asList (bean .getClass ().getDeclaredFields ()));
73+ fields .addAll (Arrays .asList (bean .getClass ().getSuperclass ().getDeclaredFields ()));
74+ for (Field field : fields ) {
75+ try {
76+ boolean isAccessible = field .isAccessible ();
77+ field .setAccessible (true );
78+ if (field .get (bean ) == null ) {
79+ field .setAccessible (isAccessible );
80+ continue ;
81+ }
8082
81- if (field .isAnnotationPresent (XStreamAlias .class )) {
82- result .put (field .getAnnotation (XStreamAlias .class ).value (), field .get (bean ).toString ());
83- }
83+ if (field .isAnnotationPresent (XStreamAlias .class )) {
84+ result .put (field .getAnnotation (XStreamAlias .class ).value (), field .get (bean ).toString ());
85+ }
8486
85- field .setAccessible (isAccessible );
86- } catch (SecurityException | IllegalArgumentException | IllegalAccessException e ) {
87- e .printStackTrace ();
88- }
87+ field .setAccessible (isAccessible );
88+ } catch (SecurityException | IllegalArgumentException | IllegalAccessException e ) {
89+ e .printStackTrace ();
90+ }
8991
90- }
92+ }
9193
92- return result ;
93- }
94+ return result ;
95+ }
9496}
0 commit comments