Knowledge/Trouble Shooting

java.lang.StackOverflowError: null

똑똑한망치 2024. 6. 10. 16:22
728x90
반응형

문제 상황

더보기
더보기

2024-06-10T16:12:19.324+09:00 ERROR 12272 --- [exercise_board] [nio-8080-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler dispatch failed: java.lang.StackOverflowError] with root cause

java.lang.StackOverflowError: null
at org.board.exercise_board.user.domain.model.User.getPassword(User.java:77) ~[main/:na]
at org.board.exercise_board.user.domain.model.User.getPassword(User.java:77) ~[main/:na]

스택 오버 플로우가 발생했다.

 

 

🪝 문제의 코드

User.java

@Entity
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Getter
@AuditOverride(forClass = BaseEntity.class)
public class User extends BaseEntity implements UserDetails {

  private String password;
  
/**
    생략
**/

  @Override
  public String getPassword() {    // 스택 오버 플로우가 발생하는 메서드
    return this.getPassword();
  }

  @Override
  public String getUsername() {
    return this.getLoginId();
  }

 

 

💊 문제 원인

재귀호출로 인해서 스택 오버 플로우가 발생하였다.

 

☀️ 해결 코드

 

@Entity
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Getter
@AuditOverride(forClass = BaseEntity.class)
public class User extends BaseEntity implements UserDetails {

  private String password;

/**
    생략
**/

  @Override
  public String getPassword() {    // 수정된 코드
    return this.password;
  }

  @Override
  public String getUsername() {
    return this.loginId;
  }

 

재귀적으로 메서드를 호출하지 않고 바로 객체를 반환하도록 하여 해결했다.

반응형