RestTemplate으로 다른 API를 호출하고 특정 객체 타입으로 JSON을 parsing 하는 상황이었다. 그런데 해당 특정 객체는 내부적으로 Inner Class를 가지고 있는 상황이었는데, 아래와 같은 예외가 발생하였다.

 

예외:can only instantiate non-static inner class by using default no-argument constructor

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@Getter
@Setter
@ToString
public class Outer {
    
    @Getter
    @Setter
    @ToString
    @NoArgsConstructor
    public class Inner1{
        
        private String[] a;
        private double[] b;
    }
    
    @Getter
    @Setter
    @ToString
    @NoArgsConstructor
    public class Inner2{
        
        private String[] a;
    }
    
    private long id;
    private Inner1[] a;
    private Inner2[] b;
    private int status;
    
}
cs

 

무슨 일 일까? 분명 매개변수 없는 생성자로 생성하였는데, 위와 같은 예외가 발생했다니... 원인은 바로 Inner Class가 static(정적)으로 선언되지 않는 한 단독(Outer 클래스를 참조하지 않고)으로 Inner Class의 디폴트 생성자를 호출해 인스턴스를 생성할 수 없는 것이다. 즉, 위와 같은 예외를 피하려면 Inner Class를 별도의 클래스로 생성하던가, 아니면 static Inner Class로 선언해주어야 한다. 

posted by 여성게
: