[SpringBoot] 스프링부트 프로젝트 생성 후 Swagger 사용 및 테스트하기3 REST PULL테스트~에러예외처리~(만들기 스프링부트3.25 )_IntelliJ IDEA 2024.1JDK17 spring-boot test api ajax json--++

  * 초기 세팅 (개발환경) 및 설정 

https://rockbottomdevbus.blogspot.com/2024/04/springboot-1-325-intellij-idea-20241.html

* 이전 글 

[SpringBoot] 스프링부트 프로젝트 생성 후 Swagger 사용 및 테스트하기1 REST PULL테스트~Swagger 사용방법~(만들기 스프링부트3.25 )_IntelliJ IDEA 2024.1JDK17 spring-boot test api ajax json--++

https://rockbottomdevbus.blogspot.com/2024/04/springboot-swagger-1-rest-pullswagger.html

[SpringBoot] 스프링부트 프로젝트 생성 후 Swagger 사용 및 테스트하기2 REST PULL테스트~컨트롤러 추가 테스트~(만들기 스프링부트3.25 )_IntelliJ IDEA 2024.1JDK17 spring-boot test api ajax json--++

https://rockbottomdevbus.blogspot.com/2024/04/springboot-swagger-2-rest-pull-325.html


* 어드비아스 패키지 추가

- CustomRestAdvice 파일 생성  

1. advice 패키지 생성 >> 경로 : /main/java/{pakage name}/advice

2. CustomRestAdvice.java 클래스 생성 >> 1번 경로에 생성 : 오류처리(예외처리) 오류 발생 시 화면에 에러를 띄워줌 (400번대 에러)

-- CustomRestAdvice.java 

package org.zerock.b01.controller.advice;

import lombok.extern.log4j.Log4j2;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.BindException;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;


import java.util.HashMap;
import java.util.Map;
import java.util.NoSuchElementException;

@RestControllerAdvice
@Log4j2

/* 오류처리 (예외처리) : 에러 발생 시 화면에서 에러를 띄워줌 */
public class CustomRestAdvice {

@ExceptionHandler(BindException.class)
@ResponseStatus(HttpStatus.EXPECTATION_FAILED)
public ResponseEntity<Map<String, String>> handlerBindException(BindException e) {
log.error(e);

Map<String, String> errorMap = new HashMap<>();
if(e.hasErrors()) {
BindingResult bindingResult = e.getBindingResult();

bindingResult.getFieldErrors().forEach(fieldError -> {
errorMap.put(fieldError.getField(), fieldError.getCode());
});
}
return ResponseEntity.badRequest().body(errorMap);
}

@ExceptionHandler(DataIntegrityViolationException.class)
@ResponseStatus(HttpStatus.EXPECTATION_FAILED)
public ResponseEntity<Map<String, String>> handlerFKException(Exception e) {
log.error(e);

Map<String, String> errorMap = new HashMap<>();

errorMap.put("time", ""+System.currentTimeMillis());
errorMap.put("msg","constraint fails");

return ResponseEntity.badRequest().body(errorMap);

}

@ExceptionHandler({NoSuchElementException.class,
EmptyResultDataAccessException.class})
@ResponseStatus(HttpStatus.EXPECTATION_FAILED)
public ResponseEntity<Map<String,String>> handlerNoSuchElement(Exception e) {
log.error(e);

Map<String, String> errorMap = new HashMap<>();

errorMap.put("time",""+System.currentTimeMillis());
errorMap.put("msg", "No Such Element Exception");
return ResponseEntity.badRequest().body(errorMap);
}

}


* 참고 

https://springdoc.org/

댓글

T O P