[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);
}
}
* 참고
댓글
댓글 쓰기