Skip to content

Commit

Permalink
ignoreError
Browse files Browse the repository at this point in the history
  • Loading branch information
looly committed Jan 1, 2017
1 parent 5618397 commit f7a73c8
Show file tree
Hide file tree
Showing 7 changed files with 83 additions and 20 deletions.
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
# Changelog

## 2.16.1

### 新特性

* BeanUtil.copyProperties方法中CopyOptions增加可选是否忽略注入错误
* BeanUtil.fillBean方法的ValueProvider增加方法,用于判断是否忽略注入错误

### Bug修复

-------------------------------------------------------------------------------------------------------------

## 2.16.0

### 新特性
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>com.xiaoleilu</groupId>
<artifactId>hutool</artifactId>
<version>2.16.0</version>
<version>2.16.1</version>
<name>hutool</name>
<description>提供丰富的Java工具方法</description>
<url>https://github.com/looly/hutool</url>
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/xiaoleilu/hutool/date/TimeInterval.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

/**
* 计时器<br>
* 计算某个过程话费的时间,精确到毫秒
* 计算某个过程花费的时间,精确到毫秒
*
* @author Looly
*
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/com/xiaoleilu/hutool/json/JSONObject.java
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ public JSONArray toJSONArray(Collection<String> names) throws JSONException {
* @return 实体类对象
*/
public <T> T toBean(Class<T> clazz) {
return BeanUtil.mapToBean(this.rawHashMap, clazz);
return BeanUtil.mapToBean(this.rawHashMap, clazz, false);
}

/**
Expand All @@ -166,7 +166,7 @@ public <T> T toBean(Class<T> clazz) {
* @return 实体类对象
*/
public <T> T toBean(T bean) {
return BeanUtil.fillBeanWithMap(this.rawHashMap, bean);
return BeanUtil.fillBeanWithMap(this.rawHashMap, bean, false);
}

@Override
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/com/xiaoleilu/hutool/lang/Dict.java
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ public <T> T toBean(T bean, boolean isToCamelCase) {
* @return vo
*/
public <T> T toBean(Class<T> clazz) {
return BeanUtil.mapToBean(this, clazz);
return BeanUtil.mapToBean(this, clazz, false);
}

/**
Expand All @@ -84,7 +84,7 @@ public <T> T toBean(Class<T> clazz) {
* @return vo
*/
public <T> T toBeanIgnoreCase(Class<T> clazz) {
return BeanUtil.mapToBeanIgnoreCase(this, clazz);
return BeanUtil.mapToBeanIgnoreCase(this, clazz, false);
}

/**
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/com/xiaoleilu/hutool/setting/AbsSetting.java
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,11 @@ public Object value(String name) {
}
return value;
}

@Override
public boolean isIgnoreError() {
return false;
}
});
}

Expand Down
75 changes: 61 additions & 14 deletions src/main/java/com/xiaoleilu/hutool/util/BeanUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@

import com.xiaoleilu.hutool.convert.Convert;
import com.xiaoleilu.hutool.exceptions.UtilException;
import com.xiaoleilu.hutool.log.StaticLog;

/**
* Bean工具类
Expand Down Expand Up @@ -91,12 +92,13 @@ public static PropertyDescriptor getPropertyDescriptor(Class<?> clazz, final Str
/**
* Map转换为Bean对象
*
* @param map Map
* @param map {@link Map}
* @param beanClass Bean Class
* @param isIgnoreError 是否忽略注入错误
* @return Bean
*/
public static <T> T mapToBean(Map<?, ?> map, Class<T> beanClass) {
return fillBeanWithMap(map, ClassUtil.newInstance(beanClass));
public static <T> T mapToBean(Map<?, ?> map, Class<T> beanClass, boolean isIgnoreError) {
return fillBeanWithMap(map, ClassUtil.newInstance(beanClass), isIgnoreError);
}

/**
Expand All @@ -105,25 +107,32 @@ public static <T> T mapToBean(Map<?, ?> map, Class<T> beanClass) {
*
* @param map Map
* @param beanClass Bean Class
* @param isIgnoreError 是否忽略注入错误
* @return Bean
*/
public static <T> T mapToBeanIgnoreCase(Map<?, ?> map, Class<T> beanClass) {
return fillBeanWithMapIgnoreCase(map, ClassUtil.newInstance(beanClass));
public static <T> T mapToBeanIgnoreCase(Map<?, ?> map, Class<T> beanClass, boolean isIgnoreError) {
return fillBeanWithMapIgnoreCase(map, ClassUtil.newInstance(beanClass), isIgnoreError);
}

/**
* 使用Map填充Bean对象
*
* @param map Map
* @param bean Bean
* @param isIgnoreError 是否忽略注入错误
* @return Bean
*/
public static <T> T fillBeanWithMap(final Map<?, ?> map, T bean) {
public static <T> T fillBeanWithMap(final Map<?, ?> map, T bean, final boolean isIgnoreError) {
return fillBean(bean, new ValueProvider(){
@Override
public Object value(String name) {
return map.get(name);
}

@Override
public boolean isIgnoreError() {
return isIgnoreError;
}
});
}

Expand All @@ -133,9 +142,10 @@ public Object value(String name) {
* @param map Map
* @param bean Bean
* @param isToCamelCase 是否将下划线模式转换为驼峰模式
* @param isIgnoreError 是否忽略注入错误
* @return Bean
*/
public static <T> T fillBeanWithMap(Map<?, ?> map, T bean, boolean isToCamelCase) {
public static <T> T fillBeanWithMap(Map<?, ?> map, T bean, boolean isToCamelCase, boolean isIgnoreError) {
if(isToCamelCase){
final Map<Object, Object> map2 = new HashMap<Object, Object>();
for (Entry<?, ?> entry : map.entrySet()) {
Expand All @@ -147,20 +157,21 @@ public static <T> T fillBeanWithMap(Map<?, ?> map, T bean, boolean isToCamelCase
map2.put(key, entry.getValue());
}
}
return fillBeanWithMap(map2, bean);
return fillBeanWithMap(map2, bean, isIgnoreError);
}

return fillBeanWithMap(map, bean);
return fillBeanWithMap(map, bean, isIgnoreError);
}

/**
* 使用Map填充Bean对象,忽略大小写
*
* @param map Map
* @param bean Bean
* @param isIgnoreError 是否忽略注入错误
* @return Bean
*/
public static <T> T fillBeanWithMapIgnoreCase(Map<?, ?> map, T bean) {
public static <T> T fillBeanWithMapIgnoreCase(Map<?, ?> map, T bean, final boolean isIgnoreError) {
final Map<Object, Object> map2 = new HashMap<Object, Object>();
for (Entry<?, ?> entry : map.entrySet()) {
final Object key = entry.getKey();
Expand All @@ -177,6 +188,11 @@ public static <T> T fillBeanWithMapIgnoreCase(Map<?, ?> map, T bean) {
public Object value(String name) {
return map2.get(name.toLowerCase());
}

@Override
public boolean isIgnoreError() {
return isIgnoreError;
}
});
}

Expand All @@ -185,20 +201,22 @@ public Object value(String name) {
*
* @param request ServletRequest
* @param beanClass Bean Class
* @param isIgnoreError 是否忽略注入错误
* @return Bean
*/
public static <T> T requestParamToBean(javax.servlet.ServletRequest request, Class<T> beanClass) {
return fillBeanWithRequestParam(request, ClassUtil.newInstance(beanClass));
public static <T> T requestParamToBean(javax.servlet.ServletRequest request, Class<T> beanClass, boolean isIgnoreError) {
return fillBeanWithRequestParam(request, ClassUtil.newInstance(beanClass), isIgnoreError);
}

/**
* ServletRequest 参数转Bean
*
* @param request ServletRequest
* @param bean Bean
* @param isIgnoreError 是否忽略注入错误
* @return Bean
*/
public static <T> T fillBeanWithRequestParam(final javax.servlet.ServletRequest request, T bean) {
public static <T> T fillBeanWithRequestParam(final javax.servlet.ServletRequest request, T bean, final boolean isIgnoreError) {
final String beanName = StrUtil.lowerFirst(bean.getClass().getSimpleName());
return fillBean(bean, new ValueProvider(){
@Override
Expand All @@ -214,6 +232,11 @@ public Object value(String name) {
}
return value;
}

@Override
public boolean isIgnoreError() {
return isIgnoreError;
}
});
}

Expand Down Expand Up @@ -258,7 +281,12 @@ public static <T> T fillBean(T bean, ValueProvider valueProvider) {
try {
property.getWriteMethod().invoke(bean, Convert.convert(property.getPropertyType(), value));
} catch (Exception e) {
throw new UtilException(StrUtil.format("Inject [{}] error!", property.getName()), e);
if(valueProvider.isIgnoreError()){
StaticLog.warn("Inject [{}] error: {}", property.getName(), e.getMessage());
continue;
}else{
throw new UtilException(e, "Inject [{}] error!", property.getName());
}
}
}
} catch (Exception e) {
Expand Down Expand Up @@ -375,6 +403,10 @@ public static void copyProperties(Object source, Object target, CopyOptions copy
ClassUtil.setAccessible(writeMethod).invoke(target, value);
}
} catch (Throwable ex) {
if(copyOptions.isIgnoreError){
StaticLog.warn("Copy property [{}] to [{}] error: {}", sourcePd.getName(), targetPd.getName(), ex.getMessage());
continue;
}
throw new UtilException(ex, "Copy property [{}] to [{}] error: {}", sourcePd.getName(), targetPd.getName(), ex.getMessage());
}
}
Expand All @@ -399,6 +431,11 @@ public static interface ValueProvider {
* @return 对应参数名的值
*/
public Object value(String name);

/**
* 是否忽略字段的注入错误
*/
public boolean isIgnoreError();
}

/**
Expand All @@ -417,6 +454,8 @@ public static class CopyOptions {
private boolean isIgnoreNullValue;
/** 忽略的属性列表,设置一个属性列表,不拷贝这些属性值 */
private String[] ignoreProperties;
/** 是否忽略字段注入错误 */
private boolean isIgnoreError;

/**
* 创建拷贝选项
Expand Down Expand Up @@ -484,5 +523,13 @@ public CopyOptions setIgnoreProperties(String... ignoreProperties){
this.ignoreProperties = ignoreProperties;
return this;
}

/**
* 设置是否忽略字段的注入错误
* @param isIgnoreError 是否忽略
*/
public void setIgnoreError(boolean isIgnoreError) {
this.isIgnoreError = isIgnoreError;
}
}
}

0 comments on commit f7a73c8

Please sign in to comment.