Exception 처리 - eunja511005/Tutorial GitHub Wiki

공통 오류 처리

1. ErrorCode 만들기
2. ErrorResponse 만들기
3. ControllerAdvice 만들기
4. ZthhErrorDTO 만들기
5. ZthhErrorService 만들기
6. ZthhErrorServiceImpl 만들기
7. CommonMapper 만들기
8. CommonMapper.xml 만들기 
9. 테이블 스키마 만들기
package com.eun.tutorial.exception;

import lombok.AllArgsConstructor;

@AllArgsConstructor
public enum ErrorCode {
    NOT_FOUND(404,"COMMON-ERR-404","PAGE NOT FOUND"),
    INTER_SERVER_ERROR(500,"COMMON-ERR-500","INTER SERVER ERROR"),
    EMAIL_DUPLICATION(400,"MEMBER-ERR-400","EMAIL DUPLICATED"),
    ;

    private int status;
    private String errorCode;
    private String message;

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public String getErrorCode() {
        return errorCode;
    }

    public void setErrorCode(String errorCode) {
        this.errorCode = errorCode;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}
package com.eun.tutorial.exception;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class ErrorResponse {
    private int status;
    private String message;
    private String code;

    public ErrorResponse(ErrorCode errorCode){
        this.status = errorCode.getStatus();
        this.message = errorCode.getMessage();
        this.code = errorCode.getErrorCode();
    }
}
package com.eun.tutorial.exception;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

import com.eun.tutorial.dto.ZthhErrorDTO;
import com.eun.tutorial.service.ZthhErrorService;

import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@ControllerAdvice
@AllArgsConstructor
public class GlobalExceptionHandler {

    private final ZthhErrorService zthhErrorService;

    @ExceptionHandler(Exception.class)
    public ResponseEntity<ErrorResponse> handleException(Exception ex){
        log.error("handleException",ex);
        
        
        String errorMessage = ex.getMessage();

        if(errorMessage.length()>2000) {
        	errorMessage = errorMessage.substring(0, 2000);
        }
        
        zthhErrorService.save(ZthhErrorDTO.builder()
                                .errorMessage("GlobalExceptionHandler Error : " + errorMessage)
                                .build()
        );
        ErrorResponse response = new ErrorResponse(ErrorCode.INTER_SERVER_ERROR);
        return new ResponseEntity<>(response, HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

package com.eun.tutorial.dto;

import java.io.Serializable;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ZthhErrorDTO implements Serializable{
	private static final long serialVersionUID = -732467492044961075L;
	
	private Long id;
    private String errorMessage;
    private String createId;
    private String createTime;
    private String updateId;
    private String updateTime;
}

package com.eun.tutorial.service;

import java.util.List;

import com.eun.tutorial.dto.ZthhErrorDTO;

public interface ZthhErrorService {
    void save(ZthhErrorDTO zthmError);
    List<ZthhErrorDTO> getErrorList();
}
package com.eun.tutorial.service;

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.eun.tutorial.dto.ZthhErrorDTO;
import com.eun.tutorial.mapper.CommonMapper;

import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
@Service
@Transactional
public class ZthhErrorServiceImpl implements ZthhErrorService {

	private final CommonMapper commonDao;
	private static final Logger logger = LoggerFactory.getLogger(ZthhErrorServiceImpl.class);

    @Override
    public void save(ZthhErrorDTO zthmError) {
    	commonDao.save(zthmError);
    }

    @Override
    public List<ZthhErrorDTO> getErrorList() {
        return commonDao.findAll();
    }
}
package com.eun.tutorial.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;

import com.eun.tutorial.dto.ZthhErrorDTO;

@Mapper
public interface CommonMapper {
	int save(ZthhErrorDTO zthmError);
	List<ZthhErrorDTO> findAll();
}

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.eun.tutorial.mapper.CommonMapper">

  <select id="findAll" resultType="com.eun.tutorial.dto.ZthhErrorDTO">
  	SELECT id, error_message,
  	       create_id, create_time, update_id, update_time
    FROM zthh_error
  </select>
  
  <select id="getError" parameterType="hashMap" resultType="com.eun.tutorial.dto.ZthhErrorDTO">
  	SELECT id, error_message,
  	       create_id, create_time, update_id, update_time
  	FROM zthh_error 
  	WHERE id = #{id, jdbcType=VARCHAR}
  </select>
  
  <insert id="save" parameterType="com.eun.tutorial.dto.ZthhErrorDTO"> 
    INSERT 
    	INTO zthh_error (id, error_message,
    	create_id, create_time, update_id, update_time)
   		VALUES (error_seq.NEXTVAL,
   		#{errorMessage, jdbcType=VARCHAR}, 
   		#{createId, jdbcType=VARCHAR}, 
   		to_char(sysdate,'yyyymmddhh24mmss'), 
   		#{updateId, jdbcType=VARCHAR}, 
   		to_char(sysdate,'yyyymmddhh24mmss')) 
  </insert>  

</mapper>
DROP SEQUENCE error_seq;

CREATE SEQUENCE error_seq
       INCREMENT BY 1
       START WITH 1
       MINVALUE 1
       MAXVALUE 9999
       NOCYCLE
       NOCACHE
       NOORDER;
      
SELECT error_seq.NEXTVAL FROM dual;   

DROP TABLE zthh_error;
CREATE TABLE zthh_error
(
    id             VARCHAR2(30),
    error_message   VARCHAR2(4000),
    create_id      VARCHAR2(30),
    create_time    VARCHAR2(14),
    update_id      VARCHAR2(30),
    update_time    VARCHAR2(14),
    CONSTRAINT zthh_error_pk PRIMARY KEY (id)
);
COMMENT ON TABLE zthh_error IS '에러 테이블';
COMMENT ON COLUMN zthh_error.id IS '에러 ID';
COMMENT ON COLUMN zthh_error.error_message IS '에러 메세지';
COMMENT ON COLUMN zthh_error.create_id IS '생성자';
COMMENT ON COLUMN zthh_error.create_time IS '생성시간';
COMMENT ON COLUMN zthh_error.update_id IS '수정장';
COMMENT ON COLUMN zthh_error.update_time IS '수정시간';
⚠️ **GitHub.com Fallback** ⚠️