Browse Source

feat: 名称参数校验,validation统一异常处理

370774330@qq.com 5 years ago
parent
commit
d2a7ea3e15

+ 2 - 5
web/src/main/java/seecoder/devcloud/web/controller/pipeline/PipelineController.java

@@ -4,8 +4,8 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
-import org.apache.ibatis.annotations.Delete;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 import seecoder.devcloud.web.model.vo.Response;
 import seecoder.devcloud.web.model.vo.Response;
 import seecoder.devcloud.web.model.vo.pipeline.PipelineConfigVO;
 import seecoder.devcloud.web.model.vo.pipeline.PipelineConfigVO;
@@ -14,9 +14,6 @@ import seecoder.devcloud.web.model.vo.pipeline.PipelineHistoryVO;
 import seecoder.devcloud.web.model.vo.pipeline.PipelineInfoVO;
 import seecoder.devcloud.web.model.vo.pipeline.PipelineInfoVO;
 import seecoder.devcloud.web.service.pipeline.PipelineService;
 import seecoder.devcloud.web.service.pipeline.PipelineService;
 
 
-import javax.ws.rs.GET;
-import javax.ws.rs.PUT;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.Collections;
 import java.util.List;
 import java.util.List;
 
 
@@ -71,7 +68,7 @@ public class PipelineController {
     @ApiOperation(value = "依据模板创建一个流水线配置", httpMethod = "POST")
     @ApiOperation(value = "依据模板创建一个流水线配置", httpMethod = "POST")
     @ApiImplicitParam(name = "pipelineCreateVO", value = "流水线创建配置信息",dataType = "object",paramType = "body")
     @ApiImplicitParam(name = "pipelineCreateVO", value = "流水线创建配置信息",dataType = "object",paramType = "body")
     @PostMapping
     @PostMapping
-    public Response createPipelineConfig(@RequestBody PipelineCreateVO pipelineCreateVO){
+    public Response createPipelineConfig(@RequestBody @Validated PipelineCreateVO pipelineCreateVO){
         pipelineService.createPipelineConfig(pipelineCreateVO);
         pipelineService.createPipelineConfig(pipelineCreateVO);
         return Response.buildSuccess();
         return Response.buildSuccess();
     }
     }

+ 20 - 3
web/src/main/java/seecoder/devcloud/web/infrastructure/GlobalExceptionHandler.java

@@ -1,16 +1,17 @@
 package seecoder.devcloud.web.infrastructure;
 package seecoder.devcloud.web.infrastructure;
 
 
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.apache.http.HttpStatus;
+import org.springframework.validation.BindException;
 import org.springframework.web.bind.annotation.ExceptionHandler;
 import org.springframework.web.bind.annotation.ExceptionHandler;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.RestControllerAdvice;
 import org.springframework.web.bind.annotation.RestControllerAdvice;
-import seecoder.devcloud.common.exceptions.AccessDeniedException;
-import seecoder.devcloud.common.exceptions.ConflictException;
 import seecoder.devcloud.common.exceptions.ServiceException;
 import seecoder.devcloud.common.exceptions.ServiceException;
 import seecoder.devcloud.web.infrastructure.security.TokenExpiredException;
 import seecoder.devcloud.web.infrastructure.security.TokenExpiredException;
 import seecoder.devcloud.web.model.vo.Response;
 import seecoder.devcloud.web.model.vo.Response;
 
 
+import javax.validation.ConstraintViolationException;
+
 /**
 /**
  * @author PuHong Weng
  * @author PuHong Weng
  * @date 2021/3/5
  * @date 2021/3/5
@@ -20,6 +21,22 @@ import seecoder.devcloud.web.model.vo.Response;
 @Slf4j
 @Slf4j
 public class GlobalExceptionHandler {
 public class GlobalExceptionHandler {
 
 
+    //***************************validation参数异常的捕获**************
+
+    @ExceptionHandler(value = BindException.class)
+    @ResponseBody
+    public Response handleResourceBindException(BindException e) {
+        return Response.buildFailure(HttpStatus.SC_BAD_REQUEST, e.getMessage());
+    }
+
+    @ExceptionHandler(value = ConstraintViolationException.class)
+    @ResponseBody
+    public Response handleResourceConstraintViolationException(ConstraintViolationException e) {
+        return Response.buildFailure(HttpStatus.SC_BAD_REQUEST, e.getMessage());
+    }
+
+    //***************************业务异常的捕获**************
+
     @ExceptionHandler(ServiceException.class)
     @ExceptionHandler(ServiceException.class)
     @ResponseBody
     @ResponseBody
     public Response serviceExceptionHandler(ServiceException e){
     public Response serviceExceptionHandler(ServiceException e){

+ 2 - 1
web/src/main/java/seecoder/devcloud/web/model/vo/pipeline/PipelineCreateVO.java

@@ -3,7 +3,7 @@ package seecoder.devcloud.web.model.vo.pipeline;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModel;
 import lombok.Data;
 import lombok.Data;
 
 
-import javax.validation.Valid;
+import javax.validation.constraints.Pattern;
 
 
 /**
 /**
  * @author PuHong Weng
  * @author PuHong Weng
@@ -18,6 +18,7 @@ public class PipelineCreateVO {
 
 
     private Integer pipelineId;
     private Integer pipelineId;
 
 
+    @Pattern(regexp = "^\\w{3,20}$", message = "流水线名只能为长度为3-20且由数字、26个英文字母或者下划线组成的字符串")
     private String name;
     private String name;
 
 
     private String templateName;
     private String templateName;