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