소스 검색

参数校验

skyline 2 년 전
부모
커밋
58e87bd6d6

+ 36 - 1
common/src/main/java/com/kym/common/handler/GlobalExceptionHandler.java

@@ -5,13 +5,22 @@ import com.kym.common.R;
 import com.kym.common.exception.BaseException;
 import com.kym.common.exception.BusinessException;
 import com.kym.common.exception.EnPushException;
+import jakarta.validation.ConstraintViolation;
+import jakarta.validation.ConstraintViolationException;
+import jakarta.validation.ValidationException;
 import org.apache.ibatis.jdbc.Null;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.http.HttpStatus;
+import org.springframework.validation.BindException;
+import org.springframework.validation.ObjectError;
+import org.springframework.web.bind.MethodArgumentNotValidException;
 import org.springframework.web.bind.annotation.ExceptionHandler;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.RestControllerAdvice;
 
+import java.util.stream.Collectors;
+
 import static com.kym.common.constant.ResponseEnum.LOGIN_FAILED;
 
 /**
@@ -51,7 +60,6 @@ public class GlobalExceptionHandler {
     }
 
 
-
     /**
      * 登录异常
      *
@@ -86,6 +94,7 @@ public class GlobalExceptionHandler {
 
     /**
      * 处理EN+推送返回异常
+     *
      * @param e
      * @return
      */
@@ -95,4 +104,30 @@ public class GlobalExceptionHandler {
         return e.getData();
     }
 
+
+    /**
+     * 校验异常处理
+     *
+     * @param e
+     * @return
+     */
+    @ExceptionHandler(value = {BindException.class, ValidationException.class, MethodArgumentNotValidException.class})
+    public R handleValidatedException(Exception e) {
+        String message = "";
+        if (e instanceof MethodArgumentNotValidException) {
+            message = ((MethodArgumentNotValidException) e).getBindingResult().getAllErrors().stream()
+                    .map(ObjectError::getDefaultMessage)
+                    .collect(Collectors.joining("; "));
+        } else if (e instanceof ConstraintViolationException) {
+            message = ((ConstraintViolationException) e).getConstraintViolations().stream()
+                    .map(ConstraintViolation::getMessage)
+                    .collect(Collectors.joining("; "));
+        } else if (e instanceof BindException) {
+            message = ((BindException) e).getAllErrors().stream().map(ObjectError::getDefaultMessage)
+                    .collect(Collectors.joining("; "));
+        }
+        return R.failed(HttpStatus.BAD_REQUEST.value(), message);
+    }
+
+
 }

+ 4 - 0
entity/pom.xml

@@ -29,6 +29,10 @@
             <artifactId>mybatis-plus-boot-starter</artifactId>
             <version>3.5.3.1</version>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
     </dependencies>
 
 </project>

+ 19 - 0
entity/src/main/java/com/kym/entity/miniapp/params/WxLoginParams.java

@@ -0,0 +1,19 @@
+package com.kym.entity.miniapp.params;
+
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+
+/**
+ * @author skyline
+ * @description
+ * @date 2023-08-12 18:45
+ */
+@Data
+public class WxLoginParams {
+    @NotBlank(message = "code不能为空")
+    private String code;
+    @NotBlank(message = "手机号不能为空")
+    private String mobilePhone;
+    private String avatar;
+    private String nickname;
+}

+ 1 - 1
miniapp/src/main/java/com/kym/miniapp/controller/ChargerController.java

@@ -155,6 +155,6 @@ public class ChargerController {
     EnResponse notificationChargeOrderInfo(@RequestBody JSONObject json) {
         return new EnResponse(enNotifyService.handleNotificationChargeOrderInfo(json));
     }
-    
+
 
 }

+ 7 - 6
miniapp/src/main/java/com/kym/miniapp/controller/UserController.java

@@ -6,10 +6,12 @@ import com.kym.common.R;
 import com.kym.common.annotation.SysLog;
 import com.kym.common.utils.IDGenerator;
 import com.kym.entity.miniapp.User;
+import com.kym.entity.miniapp.params.WxLoginParams;
 import com.kym.entity.miniapp.vo.UserVo;
 import com.kym.service.miniapp.CollectService;
 import com.kym.service.miniapp.UserService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.Map;
@@ -36,16 +38,15 @@ public class UserController {
     private IDGenerator idGenerator;
 
     /**
-     * 微信登录
+     * 微信登录/注册
      *
-     * @param code
+     * @param params
      * @return
      */
     @SysLog("微信登录")
     @PostMapping("/wxLogin")
-    public R login(@RequestBody String code, String mobilePhone, String avatar, String nickname) {
-        // TODO: 2023-07-26 参数校验
-        return userService.wxlogin(code, mobilePhone, avatar, nickname);
+    public R login(@RequestBody @Validated WxLoginParams params) {
+        return userService.wxlogin(params);
     }
 
     @SysLog("登出")
@@ -67,7 +68,7 @@ public class UserController {
     @GetMapping("/me")
     public R me() {
         StpUtil.checkLogin();
-        var userId = StpUtil.getSession().get("userId",Long.class);
+        var userId = StpUtil.getSession().get("userId", Long.class);
         return R.success(userService.getById(userId));
     }
 

+ 2 - 3
service/src/main/java/com/kym/service/miniapp/UserService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.github.pagehelper.PageInfo;
 import com.kym.common.R;
 import com.kym.entity.miniapp.User;
+import com.kym.entity.miniapp.params.WxLoginParams;
 import com.kym.entity.miniapp.vo.UserVo;
 
 /**
@@ -16,9 +17,6 @@ import com.kym.entity.miniapp.vo.UserVo;
  */
 public interface UserService extends IService<User> {
 
-
-    R wxlogin(String code, String mobilePhone, String avatar, String nickname);
-
     void logout(Long userId);
 
     boolean createUser(UserVo userVo);
@@ -27,4 +25,5 @@ public interface UserService extends IService<User> {
 
     PageInfo<UserVo> listUserVo(Integer pageNum, Integer pageSize);
 
+    R wxlogin(WxLoginParams params);
 }

+ 6 - 5
service/src/main/java/com/kym/service/miniapp/impl/UserServiceImpl.java

@@ -16,6 +16,7 @@ import com.kym.entity.miniapp.Account;
 import com.kym.entity.miniapp.Cars;
 import com.kym.entity.miniapp.User;
 import com.kym.entity.miniapp.WxPhoneNum;
+import com.kym.entity.miniapp.params.WxLoginParams;
 import com.kym.entity.miniapp.vo.UserVo;
 import com.kym.mapper.miniapp.UserMapper;
 import com.kym.service.miniapp.AccountService;
@@ -62,12 +63,12 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
     @Transactional(rollbackFor = Exception.class)
     @SneakyThrows
     @Override
-    public R wxlogin(String code, String phoneCode, String avatar, String nickname) {
+    public R wxlogin(WxLoginParams params) {
         // 微信登录
         var json = HttpUtil.getJson(WxApi.WX_MP_LOGIN.getApi(), Map.of(
                 "appid", wxConfig.getAppid(),
                 "secret", wxConfig.getSecret(),
-                "js_code", code
+                "js_code", params.getCode()
         ));
 
         var errorCode = json.getIntValue("errcode");
@@ -92,11 +93,11 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                 // access_token获取
                 var accessTokenJson = HttpUtil.getJson(WxApi.WX_GET_ACCESS_TOKEN.getApi(), Map.of("appid", wxConfig.getAppid(), "secret", wxConfig.getSecret()));
                 var accessToken = accessTokenJson.getString("access_token");
-                var wxPhoneNum = HttpUtil.post(WxApi.WX_MP_GET_PHONE.getApi().replace("ACCESS_TOKEN", accessToken), Map.of("code", code), WxPhoneNum.class);
+                var wxPhoneNum = HttpUtil.post(WxApi.WX_MP_GET_PHONE.getApi().replace("ACCESS_TOKEN", accessToken), Map.of("code", params.getCode()), WxPhoneNum.class);
                 var mobilePhone = wxPhoneNum.getPhone_info().getPurePhoneNumber();
                 newUser.setMobilePhone(mobilePhone);
-                newUser.setAvatar(avatar);
-                newUser.setNickname(nickname);
+                newUser.setAvatar(params.getAvatar());
+                newUser.setNickname(params.getNickname());
                 userMapper.insert(newUser);
                 // 创建用户账户
                 var account = new Account();