shjung před 2 roky
rodič
revize
4c4ab04b36

+ 10 - 1
src/main/java/com/its/op/config/SwaggerConfig.java

@@ -3,6 +3,7 @@ package com.its.op.config;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.http.HttpHeaders;
+import springfox.documentation.RequestHandler;
 import springfox.documentation.builders.ApiInfoBuilder;
 import springfox.documentation.builders.ParameterBuilder;
 import springfox.documentation.builders.PathSelectors;
@@ -16,6 +17,7 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.function.Predicate;
 
 //@Profile("dev|swagger")
 @Configuration
@@ -34,12 +36,19 @@ public class SwaggerConfig {
 
         List<Parameter> globalParameters = new ArrayList<>();
         globalParameters.add(parameterBuilder);
+        Predicate<RequestHandler> predicate = RequestHandlerSelectors.basePackage("com.its.op.controller")
+                .or(RequestHandlerSelectors.basePackage("com.its.op.dto.validate"));
+//        List<Predicate<RequestHandler>> predicateList = new ArrayList<>();
+//        predicateList.add(RequestHandlerSelectors.basePackage("com.its.op.controller"));
+//        predicateList.add(RequestHandlerSelectors.basePackage("com.its.op.dto.validate"));
+
         return new Docket(DocumentationType.SWAGGER_2)
                 .globalOperationParameters(globalParameters)
                 .groupName("its-api")
                 .apiInfo(this.apiInfo())
                 .select()
-                .apis(RequestHandlerSelectors.basePackage("com.its.op.controller"))
+                //.apis(RequestHandlerSelectors.basePackage("com.its.op.controller"))
+                .apis(predicate::test)
                 .paths(PathSelectors.any())
                 //.paths(PathSelectors.ant("/api/**"))
                 .build();

+ 17 - 3
src/main/java/com/its/op/dto/validate/ValidateTestController.java

@@ -1,15 +1,29 @@
 package com.its.op.dto.validate;
 
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
 
-@Api(tags = "999.Controller Test")
+import javax.validation.Valid;
+
+@Slf4j
+@Api(tags = "99.API Test")
 @Validated
-@RestController
+//@RestController
 @RequiredArgsConstructor
 @RequestMapping("/api/test")
 public class ValidateTestController {
+
+    @ApiOperation(value = "validation test", response = ValidateTestDto.class)
+    @PostMapping(value = "/validate", produces = {"application/json; charset=utf8"})
+    public ValidateTestDto postTest(final @RequestBody @Valid ValidateTestDto req) {
+        log.info("validate-postTest: {}", req);
+        return req;
+    }
+
 }

+ 18 - 1
src/main/java/com/its/op/dto/validate/ValidateTestDto.java

@@ -1,11 +1,28 @@
 package com.its.op.dto.validate;
 
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import javax.validation.constraints.PositiveOrZero;
+import javax.validation.constraints.Size;
+
 @Data
 public class ValidateTestDto {
 
+    @ApiModelProperty("전화번호 체크(nnn-nnnn-nnnn")
+    @JsonProperty("phone_no")
     @PhoneNumber
-    private String phoneNumber;
+    private String phoneNo;
+
+    @ApiModelProperty("문자길이 체크")
+    @JsonProperty("var_char")
+    @Size(min=1, max=10)
+    private String varChar;
+
+    @ApiModelProperty("양수 체크")
+    @JsonProperty("positive_no")
+    @PositiveOrZero
+    private Integer positiveNo;
 
 }

+ 22 - 1
src/main/java/com/its/op/exception/ExceptionControllerAdvisor.java

@@ -20,6 +20,20 @@ import java.util.NoSuchElementException;
 @ControllerAdvice
 public class ExceptionControllerAdvisor {//} extends ResponseEntityExceptionHandler {
 
+    private String fieldName2JsonName(String str){
+        boolean isFound = false;
+        StringBuilder sb = new StringBuilder();
+        for (char x : str.toCharArray()) {
+            if (Character.isUpperCase(x)) {
+                sb.append("_").append(Character.toLowerCase(x));
+                isFound = true;
+            } else {
+                sb.append(x);
+            }
+        }
+        return isFound ? sb.toString() : "";
+    }
+
     /**
      * Validation error
      * @param ex
@@ -32,8 +46,15 @@ public class ExceptionControllerAdvisor {//} extends ResponseEntityExceptionHand
         BindingResult bindingResult = ex.getBindingResult();
         for (FieldError fieldError : bindingResult.getFieldErrors()) {
             StringBuilder builder = new StringBuilder();
+            String fieldName = fieldName2JsonName(fieldError.getField());
+            if ("".equals(fieldName)) {
+                fieldName = fieldError.getField();
+            } else {
+                fieldName = fieldError.getField() + "(" + fieldName + ")";
+            }
+
             builder.append("[");
-            builder.append(fieldError.getField());
+            builder.append(fieldName);
             builder.append("](은)는 ");
             builder.append(fieldError.getDefaultMessage());
             builder.append(" 입력된 값: [");

+ 1 - 1
src/main/java/com/its/op/security/WebMvcConfig.java

@@ -21,7 +21,7 @@ public class WebMvcConfig implements WebMvcConfigurer {
 
         registry.addInterceptor(new ApiInterceptor())
                 .addPathPatterns("/api/**")                         // API Controller interceptors
-                .excludePathPatterns("/facility/**", "/wall/**", "/dashboard/**", "/api/resource/**", "/api/reload/**")    // 해당 경로는 인터셉터가 가로채지 않는다.
+                .excludePathPatterns("/facility/**", "/wall/**", "/dashboard/**", "/api/resource/**", "/api/reload/**", "/api/test/**", "/manual/**")    // 해당 경로는 인터셉터가 가로채지 않는다.
                 ;
     }