String 으로 직렬화돼서 들어온 값을 DTO 로 다시 맵핑을 해줘야 합니다.
이 역직렬화 과정을 할 때 ObjectMapper 가 기본생성자를 사용합니다.
그래서 무조건 @NoArgsConstructor 를 달아줘야 문제가 없는게 맞는데, 이상하게 성공하는 경우가 있습니다.
이 이유는 빌드하는 과정에서의 차이 때문입니다.
Build and run의 설정이 'Gradle' 이라면 @NoArgsConstructor 가 없어도 바인딩이 됩니다.
하지만 설정이 'IntelliJ IDEA' 이라면 @NoArgsConstructor가 있어야만 바인딩이 됩니다.
하지만 결론적으로 협업은 물론, 개인적으로 개발할 때도 또 다른 문제를 일으킬 수 있으므로 @NoArgsConstructor를 사용하거나, 기본 생성자를 만들어서 Object Mapper, Reflection에서 잘 바인딩이 될 수 있는 환경을 마련해주는게 좋습니다.