From 3955206191fdeb3a0609bd2170ed97f3f283d860 Mon Sep 17 00:00:00 2001
From: jhjang <jhjang@maprex.co.kr>
Date: 월, 10 1월 2022 11:47:35 +0900
Subject: [PATCH] - api 관련 Exception 수정 - swagger 추가

---
 src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java                  |   13 ++-
 src/main/java/kr/wisestone/owl/exception/ApiParameterException.java                |   40 +++++++++++++
 src/main/java/kr/wisestone/owl/exception/OwlRuntimeException.java                  |    2 
 src/main/java/kr/wisestone/owl/web/resolver/OwlResponseEntityExceptionHandler.java |   18 ++++++
 src/main/java/kr/wisestone/owl/service/impl/ApiTokenServiceImpl.java               |    3 
 src/main/java/kr/wisestone/owl/config/SwaggerConfig.java                           |    3 
 src/main/java/kr/wisestone/owl/web/controller/Api/ApiController.java               |   23 ++++---
 src/main/java/kr/wisestone/owl/config/SecurityConfiguration.java                   |    1 
 src/main/java/kr/wisestone/owl/exception/ApiAuthException.java                     |   40 +++++++++++++
 9 files changed, 123 insertions(+), 20 deletions(-)

diff --git a/src/main/java/kr/wisestone/owl/config/SecurityConfiguration.java b/src/main/java/kr/wisestone/owl/config/SecurityConfiguration.java
index 3df8251..0b1c5dd 100644
--- a/src/main/java/kr/wisestone/owl/config/SecurityConfiguration.java
+++ b/src/main/java/kr/wisestone/owl/config/SecurityConfiguration.java
@@ -145,7 +145,6 @@
                 .antMatchers("/language/change").permitAll()
                 .antMatchers("/security/*").permitAll()
                 .antMatchers("/api/issue").permitAll()
-                .antMatchers("/api/issue/*").permitAll()
                 .antMatchers("/**/*").authenticated();
 
 //        http.addFilter(new CustomAuthenticationFilter());
diff --git a/src/main/java/kr/wisestone/owl/config/SwaggerConfig.java b/src/main/java/kr/wisestone/owl/config/SwaggerConfig.java
index ab42cb3..238bea5 100644
--- a/src/main/java/kr/wisestone/owl/config/SwaggerConfig.java
+++ b/src/main/java/kr/wisestone/owl/config/SwaggerConfig.java
@@ -77,8 +77,7 @@
      */
     private Set<String> getConsumeContentTypes() {
         Set<String> consumes = new HashSet<>();
-        consumes.add("application/json;charset=UTF-8");
-        consumes.add("application/x-www-form-urlencoded");
+        consumes.add("");
         return consumes;
     }
 
diff --git a/src/main/java/kr/wisestone/owl/exception/ApiAuthException.java b/src/main/java/kr/wisestone/owl/exception/ApiAuthException.java
new file mode 100644
index 0000000..360f989
--- /dev/null
+++ b/src/main/java/kr/wisestone/owl/exception/ApiAuthException.java
@@ -0,0 +1,40 @@
+package kr.wisestone.owl.exception;
+
+import kr.wisestone.owl.vo.MessageVo;
+
+public class ApiAuthException extends OwlRuntimeException {
+    private static final long serialVersionUID = 1L;
+
+    public ApiAuthException() {
+        super();
+    }
+
+    public ApiAuthException(String code, final String message,
+                                 final Throwable cause) {
+        super(code, message, cause);
+        this.code = code;
+    }
+
+    public ApiAuthException(String code, final String message) {
+        super(message);
+        this.code = code;
+    }
+
+    public ApiAuthException(MessageVo message) {
+        super(message.getMessage());
+        this.code = message.getCode();
+    }
+
+    public ApiAuthException(Exception e) {
+        super(e);
+    }
+
+    public ApiAuthException(String code) {
+        this.code = code;
+    }
+
+    public ApiAuthException(String code, Exception e) {
+        super(e);
+        this.code = code;
+    }
+}
diff --git a/src/main/java/kr/wisestone/owl/exception/ApiParameterException.java b/src/main/java/kr/wisestone/owl/exception/ApiParameterException.java
new file mode 100644
index 0000000..b6ff0e8
--- /dev/null
+++ b/src/main/java/kr/wisestone/owl/exception/ApiParameterException.java
@@ -0,0 +1,40 @@
+package kr.wisestone.owl.exception;
+
+import kr.wisestone.owl.vo.MessageVo;
+
+public class ApiParameterException extends OwlRuntimeException {
+    private static final long serialVersionUID = 1L;
+
+    public ApiParameterException() {
+        super();
+    }
+
+    public ApiParameterException(String code, final String message,
+                               final Throwable cause) {
+        super(code, message, cause);
+        this.code = code;
+    }
+
+    public ApiParameterException(String code, final String message) {
+        super(message);
+        this.code = code;
+    }
+
+    public ApiParameterException(MessageVo message) {
+        super(message.getMessage());
+        this.code = message.getCode();
+    }
+
+    public ApiParameterException(Exception e) {
+        super(e);
+    }
+
+    public ApiParameterException(String code) {
+        this.code = code;
+    }
+
+    public ApiParameterException(String code, Exception e) {
+        super(e);
+        this.code = code;
+    }
+}
diff --git a/src/main/java/kr/wisestone/owl/exception/OwlRuntimeException.java b/src/main/java/kr/wisestone/owl/exception/OwlRuntimeException.java
index 266672f..37025f1 100644
--- a/src/main/java/kr/wisestone/owl/exception/OwlRuntimeException.java
+++ b/src/main/java/kr/wisestone/owl/exception/OwlRuntimeException.java
@@ -6,7 +6,7 @@
 public class OwlRuntimeException extends RuntimeException {
     private static final long serialVersionUID = 1L;
 
-    private String code;
+    protected String code;
 
     public OwlRuntimeException() {
         super();
diff --git a/src/main/java/kr/wisestone/owl/service/impl/ApiTokenServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/ApiTokenServiceImpl.java
index 4a831e9..78221fc 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/ApiTokenServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/ApiTokenServiceImpl.java
@@ -7,6 +7,7 @@
 import kr.wisestone.owl.constant.MsgConstants;
 import kr.wisestone.owl.domain.ApiToken;
 import kr.wisestone.owl.domain.User;
+import kr.wisestone.owl.exception.ApiAuthException;
 import kr.wisestone.owl.exception.OwlRuntimeException;
 import kr.wisestone.owl.repository.ApiTokenRepository;
 import kr.wisestone.owl.service.ApiTokenService;
@@ -145,7 +146,7 @@
          {
              return userVo;
          } else  {
-             throw new OwlRuntimeException(
+             throw new ApiAuthException(
                      this.messageAccessor.getMessage(MsgConstants.ERROR_TOKEN));
          }
     }
diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
index 5b36ce4..9bb8241 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -11,6 +11,8 @@
 import kr.wisestone.owl.domain.enumType.EmailType;
 import kr.wisestone.owl.domain.enumType.IssueHistoryType;
 import kr.wisestone.owl.domain.enumType.IssueStatusType;
+import kr.wisestone.owl.exception.ApiAuthException;
+import kr.wisestone.owl.exception.ApiParameterException;
 import kr.wisestone.owl.exception.OwlRuntimeException;
 import kr.wisestone.owl.mapper.DepartmentMapper;
 import kr.wisestone.owl.mapper.IssueMapper;
@@ -235,14 +237,14 @@
 
     private IssueForm convertToIssueForm(IssueApiForm issueApiForm, User user) {
         if (issueApiForm.getIssueTypeId() == null) {
-            throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_PARAMETER_ISSUE_TYPE_ERROR));
+            throw new ApiParameterException(this.messageAccessor.getMessage(MsgConstants.API_PARAMETER_ISSUE_TYPE_ERROR));
         }
 
         IssueForm issueForm = ConvertUtil.copyProperties(issueApiForm, IssueForm.class);
 //        issueForm.setFiles(issueApiForm.getFiles());
         IssueType issueType = this.issueTypeService.getIssueType(issueApiForm.getIssueTypeId());
         if (issueType == null){
-            throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_PARAMETER_ISSUE_TYPE_ERROR));
+            throw new ApiParameterException(this.messageAccessor.getMessage(MsgConstants.API_PARAMETER_ISSUE_TYPE_ERROR));
         }
 
         Workflow workflow = issueType.getWorkflow();
@@ -256,13 +258,13 @@
                 }
             }
         } else if (issueApiForm.getIssueStatusId() == null){
-            throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_ISSUE_STATUS_NOT_EXIST));
+            throw new ApiParameterException(this.messageAccessor.getMessage(MsgConstants.API_ISSUE_STATUS_NOT_EXIST));
         }
 
         // �봽濡쒖젥�듃 �엯�젰
         Project project = issueType.getProject();
         if (project == null){
-            throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_PARAMETER_PROJECT_ERROR));
+            throw new ApiParameterException(this.messageAccessor.getMessage(MsgConstants.API_PARAMETER_PROJECT_ERROR));
         }
         issueForm.setProjectId(project.getId());
 
@@ -321,7 +323,7 @@
             return issueForm;
 
         } else {
-            throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_USER_ERROR));
+            throw new ApiAuthException(this.messageAccessor.getMessage(MsgConstants.API_USER_ERROR));
         }
     }
 
@@ -367,6 +369,7 @@
                 issueForm.setIssueHostingFields(issueHostingFields);
             }
         }
+
         return issueForm;
     }
 
diff --git a/src/main/java/kr/wisestone/owl/web/controller/Api/ApiController.java b/src/main/java/kr/wisestone/owl/web/controller/Api/ApiController.java
index 1df08e5..c0e3290 100644
--- a/src/main/java/kr/wisestone/owl/web/controller/Api/ApiController.java
+++ b/src/main/java/kr/wisestone/owl/web/controller/Api/ApiController.java
@@ -4,6 +4,7 @@
 import io.swagger.annotations.ApiOperation;
 import kr.wisestone.owl.constant.MsgConstants;
 import kr.wisestone.owl.domain.Issue;
+import kr.wisestone.owl.exception.ApiParameterException;
 import kr.wisestone.owl.exception.OwlRuntimeException;
 import kr.wisestone.owl.service.IssueService;
 import kr.wisestone.owl.util.ConvertUtil;
@@ -12,6 +13,9 @@
 import kr.wisestone.owl.web.form.ApiIssueModifyForm;
 import kr.wisestone.owl.web.form.IssueApiForm;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
@@ -42,20 +46,22 @@
      */
     @PostMapping(value = "/issue")
     @ApiOperation(value = "�씠�뒋 異붽�", notes = "�깉濡쒖슫 �씠�뒋瑜� 異붽��븳�떎.")
-    @ApiImplicitParam(name = "files", required = false, dataType = "file")
+    @ApiImplicitParam(name = "files", dataType = "file")
+    @ResponseStatus(HttpStatus.CREATED)
     public
     @ResponseBody
-    Map<String, Object> addIssue(ApiIssueAddForm apiIssueAddForm, @RequestParam("files") List<MultipartFile> files) throws OwlRuntimeException, CloneNotSupportedException {
+    void addIssue(ApiIssueAddForm apiIssueAddForm, @RequestParam("files") List<MultipartFile> files)
+            throws OwlRuntimeException, CloneNotSupportedException {
         Map<String, Object> resJsonData = new HashMap<>();
 
         IssueApiForm issueApiForm = ConvertUtil.copyProperties(apiIssueAddForm, IssueApiForm.class);
-//        String str = request.getParameter(Constants.REQ_KEY_CONTENT);
+//        String str = request.getParameter(Constants.REQ_KEY_C0NTENT);
         issueApiForm.setMultipartFiles(files);
         issueApiForm.parseCustomFields(apiIssueAddForm.getCustomFields());
         issueApiForm.setApiType(IssueApiForm.ApiType.add);
         // �궗�슜�옄 �젙�쓽 �븘�뱶媛� �뾾�쓣 寃쎌슦 寃��깋�쓣 �븷 �닔 �뾾湲� �븣臾몄뿉 �삁�쇅泥섎━
         if (issueApiForm.getCustomFieldValues() == null || issueApiForm.getCustomFieldValues().size() == 0) {
-            throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_CUSTOM_FIELD_NOT_EXIST));
+            throw new ApiParameterException(this.messageAccessor.getMessage(MsgConstants.API_CUSTOM_FIELD_NOT_EXIST));
         }
 
         List<Issue> issues = this.issueService.addApiIssue(issueApiForm);
@@ -63,8 +69,6 @@
         for (Issue issue : issues) {
             this.issueService.addIssueVersion(issue.getId(), issue.getRegisterId());
         }
-
-        return this.setSuccessMessage(resJsonData);
     }
 
     /**
@@ -74,11 +78,12 @@
      * @throws OwlRuntimeException �뙆�씪誘명꽣 �삤瑜섏떆 諛쒖깮
      * @throws CloneNotSupportedException �씠�뒋 蹂듭궗 �떆�뿉 諛쒖깮
      */
-    @PostMapping(value = "/issue/1")
+    @PutMapping(value = "/issue")
     @ApiOperation(value = "�씠�뒋 �긽�깭 �닔�젙", notes = "�궗�슜�옄 �젙�쓽 �븘�뱶媛� �룞�씪�븳 湲곗〈 �씠�뒋瑜� 蹂�寃쏀븳�떎.")
+    @ResponseStatus(HttpStatus.OK)
     public
     @ResponseBody
-    Map<String, Object> modifyIssue(ApiIssueModifyForm apiIssueModifyForm) throws OwlRuntimeException, CloneNotSupportedException {
+    void modifyIssue(ApiIssueModifyForm apiIssueModifyForm) throws OwlRuntimeException, CloneNotSupportedException {
         Map<String, Object> resJsonData = new HashMap<>();
 
         IssueApiForm issueApiForm = ConvertUtil.copyProperties(apiIssueModifyForm, IssueApiForm.class);
@@ -90,8 +95,6 @@
         }
 
         this.issueService.modifyIssue(issueApiForm, new ArrayList<>());
-
-        return this.setSuccessMessage(resJsonData);
     }
 }
 
diff --git a/src/main/java/kr/wisestone/owl/web/resolver/OwlResponseEntityExceptionHandler.java b/src/main/java/kr/wisestone/owl/web/resolver/OwlResponseEntityExceptionHandler.java
index 560217e..9f9f3bf 100644
--- a/src/main/java/kr/wisestone/owl/web/resolver/OwlResponseEntityExceptionHandler.java
+++ b/src/main/java/kr/wisestone/owl/web/resolver/OwlResponseEntityExceptionHandler.java
@@ -3,6 +3,8 @@
 import kr.wisestone.owl.common.MessageAccessor;
 import kr.wisestone.owl.constant.Constants;
 import kr.wisestone.owl.constant.MsgConstants;
+import kr.wisestone.owl.exception.ApiAuthException;
+import kr.wisestone.owl.exception.ApiParameterException;
 import kr.wisestone.owl.exception.OwlRuntimeException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -34,6 +36,22 @@
         super();
     }
 
+    @ExceptionHandler({ApiParameterException.class })
+    public ResponseEntity<Object> handleBadRequest(final ApiParameterException ex, final WebRequest request) {
+        Map<String, Object> resJsonData = new HashMap<String, Object>();
+        resJsonData.put(Constants.RES_KEY_MESSAGE, this.messageAccessor.getResMessage(ex, Constants.RES_KEY_MSG_FAIL));
+
+        return this.handleExceptionInternal(ex, resJsonData, new HttpHeaders(), HttpStatus.BAD_REQUEST, request);
+    }
+
+    @ExceptionHandler({ApiAuthException.class })
+    public ResponseEntity<Object> handleBadRequest(final ApiAuthException ex, final WebRequest request) {
+        Map<String, Object> resJsonData = new HashMap<String, Object>();
+        resJsonData.put(Constants.RES_KEY_MESSAGE, this.messageAccessor.getResMessage(ex, Constants.RES_KEY_MSG_FAIL));
+
+        return this.handleExceptionInternal(ex, resJsonData, new HttpHeaders(), HttpStatus.UNAUTHORIZED, request);
+    }
+
     @ExceptionHandler({OwlRuntimeException.class })
     public ResponseEntity<Object> handleBadRequest(final OwlRuntimeException ex, final WebRequest request) {
         Map<String, Object> resJsonData = new HashMap<String, Object>();

--
Gitblit v1.8.0