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 '수정시간';