Commit 017dad17 by Yiming Liu

Clean up

parent 88b4069b
...@@ -2,7 +2,6 @@ package com.ctrip.apollo.biz.repository; ...@@ -2,7 +2,6 @@ package com.ctrip.apollo.biz.repository;
import java.util.List; import java.util.List;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param; import org.springframework.data.repository.query.Param;
......
...@@ -8,6 +8,7 @@ import org.springframework.web.HttpRequestMethodNotSupportedException; ...@@ -8,6 +8,7 @@ import org.springframework.web.HttpRequestMethodNotSupportedException;
import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ExceptionHandler;
import com.ctrip.apollo.core.exception.AbstractBaseException;
import com.ctrip.apollo.core.exception.BadRequestException; import com.ctrip.apollo.core.exception.BadRequestException;
import com.ctrip.apollo.core.exception.NotFoundException; import com.ctrip.apollo.core.exception.NotFoundException;
...@@ -32,13 +33,12 @@ public class GlobalDefaultExceptionHandler { ...@@ -32,13 +33,12 @@ public class GlobalDefaultExceptionHandler {
} }
private ResponseEntity<Map<String, Object>> handleError(HttpServletRequest request, private ResponseEntity<Map<String, Object>> handleError(HttpServletRequest request,
HttpStatus status, Throwable ex) { HttpStatus status, Throwable ex) {
return handleError(request, status, ex, ex.getMessage()); return handleError(request, status, ex, ex.getMessage());
} }
private ResponseEntity<Map<String, Object>> handleError(HttpServletRequest request, private ResponseEntity<Map<String, Object>> handleError(HttpServletRequest request,
HttpStatus status, Throwable ex, HttpStatus status, Throwable ex, String message) {
String message) {
ex = resolveError(ex); ex = resolveError(ex);
Map<String, Object> errorAttributes = new LinkedHashMap<>(); Map<String, Object> errorAttributes = new LinkedHashMap<>();
errorAttributes.put("status", status.value()); errorAttributes.put("status", status.value());
...@@ -46,6 +46,9 @@ public class GlobalDefaultExceptionHandler { ...@@ -46,6 +46,9 @@ public class GlobalDefaultExceptionHandler {
errorAttributes.put("timestamp", errorAttributes.put("timestamp",
LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)); LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));
errorAttributes.put("exception", resolveError(ex).getClass().getName()); errorAttributes.put("exception", resolveError(ex).getClass().getName());
if (ex instanceof AbstractBaseException) {
errorAttributes.put("errorCode", ((AbstractBaseException) ex).getErrorCode());
}
HttpHeaders headers = new HttpHeaders(); HttpHeaders headers = new HttpHeaders();
headers.setContentType(APPLICATION_JSON); headers.setContentType(APPLICATION_JSON);
return new ResponseEntity<>(errorAttributes, headers, status); return new ResponseEntity<>(errorAttributes, headers, status);
...@@ -53,17 +56,19 @@ public class GlobalDefaultExceptionHandler { ...@@ -53,17 +56,19 @@ public class GlobalDefaultExceptionHandler {
@ExceptionHandler({HttpRequestMethodNotSupportedException.class, HttpMediaTypeException.class}) @ExceptionHandler({HttpRequestMethodNotSupportedException.class, HttpMediaTypeException.class})
public ResponseEntity<Map<String, Object>> methodNotSupportedException(HttpServletRequest request, public ResponseEntity<Map<String, Object>> methodNotSupportedException(HttpServletRequest request,
ServletException ex) { ServletException ex) {
return handleError(request, BAD_REQUEST, ex); return handleError(request, BAD_REQUEST, ex);
} }
@ExceptionHandler(NotFoundException.class) @ExceptionHandler(NotFoundException.class)
public ResponseEntity<Map<String, Object>> notFound(HttpServletRequest request, NotFoundException ex) { public ResponseEntity<Map<String, Object>> notFound(HttpServletRequest request,
NotFoundException ex) {
return handleError(request, NOT_FOUND, ex); return handleError(request, NOT_FOUND, ex);
} }
@ExceptionHandler(BadRequestException.class) @ExceptionHandler(BadRequestException.class)
public ResponseEntity<Map<String, Object>> badRequest(HttpServletRequest request, BadRequestException ex){ public ResponseEntity<Map<String, Object>> badRequest(HttpServletRequest request,
BadRequestException ex) {
return handleError(request, BAD_REQUEST, ex); return handleError(request, BAD_REQUEST, ex);
} }
......
...@@ -2,11 +2,11 @@ package com.ctrip.apollo.core; ...@@ -2,11 +2,11 @@ package com.ctrip.apollo.core;
public interface ServiceNameConsts { public interface ServiceNameConsts {
final String APOLLO_METASERVICE = "apollo-metaservice"; String APOLLO_METASERVICE = "apollo-metaservice";
final String APOLLO_CONFIGSERVICE = "apollo-configservice"; String APOLLO_CONFIGSERVICE = "apollo-configservice";
final String APOLLO_ADMINSERVICE = "apollo-adminservice"; String APOLLO_ADMINSERVICE = "apollo-adminservice";
final String APOLLO_PORTAL = "apollo-portal"; String APOLLO_PORTAL = "apollo-portal";
} }
...@@ -67,7 +67,7 @@ public class StringUtils { ...@@ -67,7 +67,7 @@ public class StringUtils {
return true; return true;
} }
for (int i = 0; i < strLen; i++) { for (int i = 0; i < strLen; i++) {
if ((Character.isWhitespace(str.charAt(i)) == false)) { if (Character.isWhitespace(str.charAt(i)) == false) {
return false; return false;
} }
} }
...@@ -252,7 +252,7 @@ public class StringUtils { ...@@ -252,7 +252,7 @@ public class StringUtils {
*/ */
private static boolean startsWith(String str, String prefix, boolean ignoreCase) { private static boolean startsWith(String str, String prefix, boolean ignoreCase) {
if (str == null || prefix == null) { if (str == null || prefix == null) {
return (str == null && prefix == null); return str == null && prefix == null;
} }
if (prefix.length() > str.length()) { if (prefix.length() > str.length()) {
return false; return false;
...@@ -325,7 +325,7 @@ public class StringUtils { ...@@ -325,7 +325,7 @@ public class StringUtils {
} }
public static interface StringFormatter<T> { public static interface StringFormatter<T> {
public String format(T obj); String format(T obj);
} }
public static <T> String join(Collection<T> collection, String separator) { public static <T> String join(Collection<T> collection, String separator) {
......
...@@ -3,7 +3,7 @@ package com.ctrip.apollo.portal.service.txtresolver; ...@@ -3,7 +3,7 @@ package com.ctrip.apollo.portal.service.txtresolver;
import com.ctrip.apollo.core.dto.ItemChangeSets; import com.ctrip.apollo.core.dto.ItemChangeSets;
import com.ctrip.apollo.core.dto.ItemDTO; import com.ctrip.apollo.core.dto.ItemDTO;
import com.ctrip.apollo.core.utils.StringUtils; import com.ctrip.apollo.core.utils.StringUtils;
import com.ctrip.apollo.portal.util.BeanUtils; import com.ctrip.apollo.common.utils.BeanUtils;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
......
package com.ctrip.apollo.portal.util;
import org.springframework.beans.BeanWrapper;
import org.springframework.beans.BeanWrapperImpl;
import org.springframework.util.CollectionUtils;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class BeanUtils {
/**
* <pre>
* List<UserBean> userBeans = userDao.queryUsers();
* List<UserDTO> userDTOs = BeanUtil.batchTransform(UserDTO.class, userBeans);
* </pre>
*/
public static <T> List<T> batchTransform(final Class<T> clazz, List srcList) {
if (CollectionUtils.isEmpty(srcList)) {
return Collections.EMPTY_LIST;
}
List<T> result = new ArrayList<>(srcList.size());
for (Object srcObject : srcList) {
result.add(transfrom(clazz, srcObject));
}
return result;
}
/**
* 封装{@link org.springframework.beans.BeanUtils#copyProperties},惯用与直接将转换结果返回
*
* <pre>
* UserBean userBean = new UserBean("username");
* return BeanUtil.transform(UserDTO.class, userBean);
* </pre>
*/
public static <T> T transfrom(Class<T> clazz, Object src) {
if (src == null) {
return null;
}
T instance = null;
try {
instance = clazz.newInstance();
} catch (Exception e) {
throw new RuntimeException(e);
}
org.springframework.beans.BeanUtils.copyProperties(src, instance, getNullPropertyNames(src));
return instance;
}
static String[] getNullPropertyNames(Object source) {
final BeanWrapper src = new BeanWrapperImpl(source);
java.beans.PropertyDescriptor[] pds = src.getPropertyDescriptors();
Set<String> emptyNames = new HashSet<String>();
for (java.beans.PropertyDescriptor pd : pds) {
Object srcValue = src.getPropertyValue(pd.getName());
if (srcValue == null) {
emptyNames.add(pd.getName());
}
}
String[] result = new String[emptyNames.size()];
return emptyNames.toArray(result);
}
/**
* 用于将一个列表转换为列表中的对象的某个属性映射到列表中的对象
*
* <pre>
* List<UserDTO> userList = userService.queryUsers();
* Map<Integer, userDTO> userIdToUser = BeanUtil.mapByKey("userId", Integer.class, userList,
* UserDTO.class);
* </pre>
*
* @param key 属性名
*/
public static <K, V> Map<K, V> mapByKey(String key, List list) {
Map<K, V> map = new HashMap<K, V>();
if (CollectionUtils.isEmpty(list)) {
return map;
}
try {
Class clazz = list.get(0).getClass();
Field field = deepFindField(clazz, key);
field.setAccessible(true);
for (Object o : list) {
map.put((K) field.get(o), (V) o);
}
} catch (Exception e) {
throw new RuntimeException();
}
return map;
}
/**
* 根据列表里面的属性聚合
*
* <pre>
* List<ShopDTO> shopList = shopService.queryShops();
* Map<Integer, List<ShopDTO>> city2Shops = BeanUtil.aggByKeyToList("cityId", shopList);
* </pre>
*/
public static <K, V> Map<K, List<V>> aggByKeyToList(String key, List list) {
Map<K, List<V>> map = new HashMap<K, List<V>>();
if (CollectionUtils.isEmpty(list)) {// 防止外面传入空list
return map;
}
try {
Class clazz = list.get(0).getClass();
Field field = deepFindField(clazz, key);
field.setAccessible(true);
for (Object o : list) {
K k = (K) field.get(o);
if (map.get(k) == null) {
map.put(k, new ArrayList<V>());
}
map.get(k).add((V) o);
}
} catch (Exception e) {
throw new RuntimeException();
}
return map;
}
/**
* 用于将一个对象的列表转换为列表中对象的属性集合
*
* <pre>
* List<UserDTO> userList = userService.queryUsers();
* Set<Integer> userIds = BeanUtil.toPropertySet("userId", userList);
* </pre>
*/
public static Set toPropertySet(String key, List list) {
Set set = new HashSet();
if (CollectionUtils.isEmpty(list)) {// 防止外面传入空list
return set;
}
try {
Class clazz = list.get(0).getClass();
Field field = deepFindField(clazz, key);
if (field == null) {
return set;
}
field.setAccessible(true);
for (Object o : list) {
set.add(field.get(o));
}
} catch (Exception e) {
throw new RuntimeException(e);
}
return set;
}
private static Field deepFindField(Class clazz, String key) {
Field field = null;
while (!clazz.getName().equals(Object.class.getName())) {
try {
field = clazz.getDeclaredField(key);
if (field != null) {
break;
}
} catch (Exception e) {
clazz = clazz.getSuperclass();
}
}
return field;
}
/**
* 获取某个对象的某个属性
*/
public static Object getProperty(Object obj, String fieldName) {
try {
Field field = deepFindField(obj.getClass(), fieldName);
if (field != null) {
field.setAccessible(true);
return field.get(obj);
}
} catch (Exception e) {
// ig
}
return null;
}
/**
* 设置某个对象的某个属性
*/
public static void setProperty(Object obj, String fieldName, Object value) {
try {
Field field = deepFindField(obj.getClass(), fieldName);
if (field != null) {
field.setAccessible(true);
field.set(obj, value);
}
} catch (Exception e) {
// ig
}
}
public static List toPropertyList(String key, List list) {
return new ArrayList(toPropertySet(key, list));
}
}
...@@ -89,8 +89,8 @@ ...@@ -89,8 +89,8 @@
<module>apollo-buildtools</module> <module>apollo-buildtools</module>
<module>apollo-core</module> <module>apollo-core</module>
<module>apollo-client</module> <module>apollo-client</module>
<module>apollo-biz</module>
<module>apollo-common</module> <module>apollo-common</module>
<module>apollo-biz</module>
<module>apollo-configservice</module> <module>apollo-configservice</module>
<module>apollo-adminservice</module> <module>apollo-adminservice</module>
<module>apollo-portal</module> <module>apollo-portal</module>
...@@ -106,12 +106,12 @@ ...@@ -106,12 +106,12 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.ctrip.apollo</groupId> <groupId>com.ctrip.apollo</groupId>
<artifactId>apollo-biz</artifactId> <artifactId>apollo-common</artifactId>
<version>${project.version}</version> <version>${project.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.ctrip.apollo</groupId> <groupId>com.ctrip.apollo</groupId>
<artifactId>apollo-common</artifactId> <artifactId>apollo-biz</artifactId>
<version>${project.version}</version> <version>${project.version}</version>
</dependency> </dependency>
<dependency> <dependency>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment