Jackson objectmapper의 deserialize(역직렬화, json string -> java object) 순서는
1. 대상 클래스의 기본 생성자로 객체 생성
2. 해당 객체의 setter 메소드를 활용해서 json 값을 객체에 설정
3. 만약 setter 메소드가 없다면 java reflection 패키지를 활용해서 객체에 값 설정
에러는 1번 항목에서 발생
@NoArgsConstructor
파라미터가 없는 기본 생성자를 만들어준다.
즉, @NoArgsConstructor가 붙어있는 객체의 인스턴스를 만들 때,
아래처럼 argument를 하나도 넘기지 않으며 생성자 호출을 할 수 있다.
하지만 만약, 항상 초기화가 필요한 final이 붙은 field가 있는데 @NoArgsConstructor을 사용한다면 compile error가 발생할 것이다.
대신, @NoArgsConstructor(force = true)처럼 force라는 옵션에 true 값을 주면, 모든 final fields는 0 / false / null로 초기화된다.
그런데 field에 final이 아닌 @NonNull 같은 제약이 있는 어노테이션이 붙어있다면,
얘는 force = true 옵션을 주어도 생성자에 들어가지 않기 때문에 나중에 프로그래머가 할당해주어야 한다.
hibernate나 Service Provider Interface 같은 특정 Java 구성에서 필요로 하고,
주로 @Data나 어노테이션을 생성하는 생성자 등과 함께 사용된다.
@NotNull 어노테이션 삭제 후 프론트에서 유효성검증으로 처리