본문 바로가기

프로젝트/개인

5. 더미데이터 delete테스트+exception처리+ 무한참조방지

1.더미 데이터 delete

 

 @DeleteMapping("/dummy/user/{id}")
    public String delete(@PathVariable int id){
        try {
        userRepository.deleteById(id);
//        } catch (Exception e){
//            좀 더 정확한 exception 확인 
        } catch (EmptyResultDataAccessException e){
            return "삭제에 실패하였습니다. 해당 id는 db에 없습니다.";
        }
        return "삭제되었습니다. id :"+id;
    }

 

삭제에서 일어날 수 있는 오류 중 대표: 없는 데이터 넣었을 때

그래서 정확한 오류를 적으려면

EmptyResultDataAccessException

귀찮으면 그냥 EXCEPTION

1-1.사용자에게 보이는 Exception처리

handler 패키지 추가

package com.cos.blog.handler;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestController;


//ControllerAdvice : 이 컨트롤러가 어떤 클래스에서 exception이 발생하든 처리 가능하다
@ControllerAdvice
@RestController
public class GlobalExceptionHandler {
//    모든 에러를 스프링이 감지해서 이 메소드로 보내줌
    @ExceptionHandler(value = Exception.class)
    public String handleArgumentException(Exception e){
        return "<h1>"+e.getMessage()+"</h1>";
    }


}

이제 user에게 white label 오류페이지를 보여주지 않는다.

 

2. 무한 참조 방지하기

(1) Entity로 받고 Json직렬화 하기 전에 DTO 생성후 복사하기

BeanUtils.copyProperties(A,B) 

(2) 처음부터 DTO로 DB에서 받기

(3) @JsonIgnore

(4) @JsonIgnoreProperties({"board"})

(5) @JsonBackReference @JsonManagedReference 

 

참고 

https://dublin-java.tistory.com/32