Skip to content

Commit a2398dd

Browse files
committed
修复方法
1 parent c844165 commit a2398dd

File tree

1 file changed

+48
-46
lines changed
  • weixin-java-common/src/main/java/me/chanjar/weixin/common/util

1 file changed

+48
-46
lines changed
Lines changed: 48 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,20 @@
11
package 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-
123
import com.google.common.collect.Lists;
134
import com.google.common.collect.Maps;
145
import com.thoughtworks.xstream.annotations.XStreamAlias;
15-
166
import me.chanjar.weixin.common.annotation.Required;
177
import me.chanjar.weixin.common.bean.result.WxError;
188
import 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>
@@ -25,25 +24,28 @@
2524
* </pre>
2625
*/
2726
public 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

Comments
 (0)