본문 바로가기

Server Development/Exception

(7)
java.lang.IllegalArgumentException: org.hibernate.query.SemanticException: query specified join fetching, but the owner of the fetched association was not present in the select list 해당 오류는 조인 관계에서 발생하는 오류로 만약, select의 주체로 조인의 주인이 조회되지 않는 경우, 발생합니다. 예를 들어, 부모-자식이 있고 from에 부모가 있다고 가정했을 때, 부모 자체를 조회하지 않았을 때 발생하는 오류입니다.
java.lang.reflect.InaccessibleObjectException: Unable to make field private final java.time.LocalDate java.time.LocalDateTime.date accessible 상황 설명 엔터티를 그대로 클라이언트에 전달해주는 API가 있다. 해당 엔터티는 상위클래스에 LocalDateTime을 통해 생성, 수정에 대해 업데이트 되는 필드이다. 이 데이터는 클라이언트에 전달되지않고 DB에만 저장이 되어야 한다. 하지만 테스트 코드에서 아래와 같이 작성후 테스팅을 할 시에는 해당 오류가 발생한다. .andExpect(MockMvcResultMatchers.content().json(new Gson().toJson(response))); Json으로 변경시 해당 필드에 대한 접근 권한이 없기 때문에 발생한다. 해결방법 - 해당 필드를 반환하지 않는다. 기대 사항 - 해당 필드는 DB에만 저장하는 것이고 사용자에게 보낼 필요가 없는데 이를 구현 가능하다. 1. @Expose 애너테이..
[dispatcherServlet] in context with path [] threw exception [Request processing failed:오류처리 클래스명] with root cause 1. 문제 발생 과정 로그인 API를 처리하는 과정에서 만약, 해당 아이디 정보가 DB에 없다면 오류 클래스를 생성하고 던진다. 이 후, @RestControllerAdvice는 이 오류 클래스가 생성된다면 이를 읽어서 적절한 조치를 취한다. 나는 해당 오류를 클라이언트에 포장해 전달하고자하는 상황이었다. 하지만 해당 오류가 클라이언트에 전달되지 않고 해당 오류만 발생을 하고 있다. 2. 해결 - 빈 관리의 문제 해당 문제는 빈 관리가 제대로 이루어지지 않아서 발생하였다. 따라서 해당 오류를 겪고 있다면 모든 빈이 제대로 주입되고 있는지 확인할 필요가 있다. Controller - Serice - DAO 주입 제대로 되는지 확인 SpringBoot의 메인 클래스에 만약 @ComponentScan을 통해 ..
Parameter 0 of constructor in ... required a bean of type ... that could not be found. 최근한 5일간 해당 오류를 해결하기 위해 많은 노력을 기울였다. 그에 따른 나름의 고찰을 정리해보고자 한다. 1. 기본적인 의미 기본적으로 해당 오류는 연결하고자 하는 빈을 못찾겠다는 의미이다. 현재 서버를 Spring으로 작성하고 있는데, Spring의 가장 큰 특징은 제어의 역전이라고 할 수 있다. 이러한 빈들을 주입할 때, xml을 작성하지 않고도 SpringBoot에서는 자동으로 빈을 주입해준다. 하지만 이 오류는 이러한 주입을 하려고 하는데 주입하고자 하는 빈을 못찾겠다는 의미이다. 2. 해결방법 2-1. 명시해서 알려주는 방법 - 해당 방법은 약간 너가 못찾겠으면 내가 패키지명을 알려줄테니까 거기서 찾아봐라는 의미이다. 아래와 같이 작성시 해당 패키지에서 찾고자 하는 빈을 찾아준다. @Spri..
Lombok @ToString - StackOverflow Error Lombok을 통해 @ToString을 사용할 때 뿐만아니라 다른 애너테이션을 사용할 때, 자주 StackOverFlow가 발생한다. 원인, 해결방법 순으로 블로그를 정리하고자 한다. 원인 : java.lang.StackOverflowError, Handler dispatch failed: java.lang.StackOverflowError 원인 JPA 연관관계 매핑 후, toString()을 사용하게 되면 발생을 한다. 예를 들어, 조인이 되어있는 3가지의 테이블이 있다고 가정하자. 이러한 경우 3가지의 테이블은 서로 양방향 관계인데, 서로 다른 엔터티가 서로 toString을 무한으로 호출하면서 StackOverFlow가 발생하는 것이다. 자세한 예로 Member - Store - Order 해당 테..
sts4 응용프로그램을 열 수 없습니다. 어느날 갑자기 sts4가 안열린다. 나의 이유는 이러했다. 맥 환경에서는 sts4 사용을 위해 인증 절차를 거친다. 이때, 해당 인증 경로에 문제가 있으면 실행이 되지 않는다. 확인해보니 /Applications/SpringToolSuite4.app/Contents/MacOS/\/SpringToolSuite4 로 되어있었고 내가 실수로 '\'파일을 생성했던 것 같다. 해당 경로로 들어가 파일을 삭제하고 강제 인증을 실시했다. codesign --force --deep --sign - /Applications/SpringToolSuite4.app/Contents/MacOS/SpringToolSuite4 이후 잘 돌아간다.
Lombok 안됨 편리한 getter, setter, contructor 구현, 줄어든 코드 등을 위해 Lombok 사용을 마음먹었다. 1. dependancy 설정 가장 먼저 dependancy 설정을 한다. org.projectlombok lombok provided 2. Annotation 설정 getter, setter, constructor with no Argument 생성을 위해 애너테이션을 설정한다. @Getter @Setter @NoArgsConstructor 하지만, 안된다. 다른 라이브러리는 이렇게 하면 되던데 왜 안될까? 찾아보니 Lombok은 따로 설치가 필요하다. 해결 1. 해당 jar다운로드 https://projectlombok.org/download Download projectlombok...