Ver Fonte

MOD: user wrapper

zhangxin há 7 anos atrás
pai
commit
207557cfd3

+ 86 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/constants/Converter.java

@@ -0,0 +1,86 @@
+package cn.iselab.mooctest.user.constants;
+
+import com.google.common.collect.Maps;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springframework.cglib.beans.BeanCopier;
+
+import java.util.Map;
+
+/**
+ * @author sean
+ * @date 2018-03-06.
+ */
+public class Converter {
+    private static Map<CopierIdentity, BeanCopier> copierCache = Maps.newConcurrentMap();
+    private static PrimitiveConverter primitiveConverter = new PrimitiveConverter();
+
+    public static <T> T copy(T target, Object source) {
+        BeanCopier copier = getCopier(source.getClass(), target.getClass());
+        copier.copy(source, target, primitiveConverter);
+        return target;
+    }
+
+    public static <T> T convert(Class<T> targetClass, Object source) {
+        try {
+            T target = targetClass.newInstance();
+            BeanCopier copier = getCopier(source.getClass(), targetClass);
+            copier.copy(source, target, primitiveConverter);
+            return target;
+        } catch (InstantiationException | IllegalAccessException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    private static BeanCopier getCopier(Class<?> source, Class<?> target) {
+        CopierIdentity identity = new CopierIdentity(source, target);
+        BeanCopier copier;
+        if (copierCache.containsKey(identity)) {
+            copier = copierCache.get(identity);
+        } else {
+            copier = BeanCopier.create(source, target, true);
+            copierCache.putIfAbsent(identity, copier);
+        }
+        return copier;
+    }
+
+    public static class PrimitiveConverter implements org.springframework.cglib.core.Converter {
+        @Override
+        @SuppressWarnings("unchecked")
+        public Object convert(Object value, Class target, Object context) {
+            if (value == null) return null;
+            if (target.equals(String.class)
+                    && !String.class.isAssignableFrom(value.getClass()))
+                return value.toString();
+            if (Number.class.isAssignableFrom(value.getClass())) {
+                Number num = (Number) value;
+                if (target.equals(int.class) || target.equals(Integer.class))
+                    return num.intValue();
+                else if (target.equals(long.class) || target.equals(Long.class))
+                    return num.longValue();
+                else if (target.equals(short.class) || target.equals(Short.class))
+                    return num.shortValue();
+                else if (target.equals(float.class) || target.equals(Float.class))
+                    return num.floatValue();
+                else if (target.equals(double.class) || target.equals(Double.class))
+                    return num.doubleValue();
+                else if (target.equals(byte.class) || target.equals(Byte.class))
+                    return num.byteValue();
+            } else if (target.isAssignableFrom(value.getClass()))
+                return value;
+            return null;
+        }
+    }
+
+    @AllArgsConstructor
+    @Data
+    @EqualsAndHashCode
+    private static class CopierIdentity {
+        private Class<?> source;
+        private Class<?> target;
+    }
+
+}
+
+

+ 6 - 4
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/ctrl/UserController.java

@@ -4,10 +4,7 @@ import cn.iselab.mooctest.rpc.user.data.UserDTO;
 import cn.iselab.mooctest.user.constants.UrlConstants;
 import cn.iselab.mooctest.user.web.logic.UserLogic;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * @author sean
@@ -28,4 +25,9 @@ public class UserController extends BaseController {
     public UserDTO getUserByEmail(@PathVariable("email") String email) {
         return userLogic.getUserByEmail(email);
     }
+
+    @RequestMapping(value = UrlConstants.API + "user", method = RequestMethod.POST)
+    public UserDTO save(@RequestBody UserDTO userDTO){
+        return userLogic.save(userDTO);
+    }
 }

+ 7 - 4
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/logic/impl/UserLogicImpl.java

@@ -1,6 +1,7 @@
 package cn.iselab.mooctest.user.web.logic.impl;
 
 import cn.iselab.mooctest.rpc.user.data.UserDTO;
+import cn.iselab.mooctest.user.constants.Converter;
 import cn.iselab.mooctest.user.model.User;
 import cn.iselab.mooctest.user.service.UserService;
 import cn.iselab.mooctest.user.web.exception.HttpBadRequestException;
@@ -74,13 +75,15 @@ public class UserLogicImpl extends BaseLogic implements UserLogic {
 
     @Override
     public UserDTO save(UserDTO userDTO) {
-        User user = userWrapper.unwrap(userDTO);
-        return userWrapper.wrap(userService.register(user));
+        User user = Converter.convert(User.class, userDTO);
+        user = userService.register(user);
+        return Converter.convert(UserDTO.class, user);
     }
 
     @Override
     public UserDTO updateUser(UserDTO userDTO) {
-        User user = userWrapper.unwrap(userDTO);
-        return userWrapper.wrap(userService.update(user));
+        User user = Converter.convert(User.class, userDTO);
+        user = userService.update(user);
+        return Converter.convert(UserDTO.class, user);
     }
 }

+ 1 - 18
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/wrapper/UserWrapper.java

@@ -4,8 +4,6 @@ import cn.iselab.mooctest.rpc.user.data.UserDTO;
 import cn.iselab.mooctest.user.model.User;
 import org.springframework.stereotype.Service;
 
-import java.sql.Timestamp;
-
 /**
  * @author sean
  * @date 2018-03-04.
@@ -34,21 +32,6 @@ public class UserWrapper extends BaseWrapper<UserDTO, User> {
 
     @Override
     public User unwrap(UserDTO data) {
-        User user = new User();
-
-        user.setSchool(data.getSchool());
-        user.setProvince(data.getProvince());
-        user.setPhotoUrl(data.getPhotoUrl());
-        user.setAvailable(data.getAvailable());
-        user.setCity(data.getCity());
-        user.setCreateTime(new Timestamp(data.getCreateTime()));
-        user.setEmail(data.getEmail());
-        user.setId(data.getId());
-        user.setManualCheckValid(data.getManualCheckValid());
-        user.setMobile(data.getMobile());
-        user.setName(data.getName());
-        user.setPassword(data.getPassword());
-
-        return user;
+        return null;
     }
 }