전체 글
-
[Spring] DTO 클래스에 기본 생성자가 없을 때 발생하는 에러 해결방법개발 지식/Spring 2023. 11. 21. 17:30
문제 상황 - DTO 클래스에 기본 생성자가 없어서 다음과 같은 에러가 뜨는 상황 여기에 사진 넣기! 해결 방안 - 빌드 설정을 인텔리제이에서 gradle로 변경하니 해결되었다. - 결론 기본생성자가 없어도 정상적으로 매핑된다. 동작 원리 - Spring Boot가 JSON을 매핑하는 구현체로 Jackson 라이브러리의 ObjectMapper를 사용하는데 이때 getter, setter의 prefix를 제거하고 필드명과 비교하여 리플렉션을 이용해 값을 할당하고 이 과정에서 기본 생성자가 필요하다. - 하지만 매핑이 필요한 필드를 가진 생성자에 @JsonCreator 애너테이션을 사용하게 되면 Jackson이 이를 인식해서 필드를 매핑할 수 있게 한다. - 생성자가 한 개인 경우에는 해당 애너테이션은 생..
-
[Spring] @RequestBody와 기본 생성자개발 지식/Spring 2023. 11. 21. 16:38
- 매핑하는 과정에서 getter 또는 setter의 이름을 사용하여 매핑하기 때문에 getter만 있어도 된다.(둘 다 없는 경우 에러 발생) - 코드로 자세한 동작을 보려면 아래 블로그를 참고! 참고 자료 https://blogshine.tistory.com/445 [Spring] @RequestBody에 기본생성자만 필요하고 Setter는 필요없는 이유 - 1 그간 밀어오고 밀어왔던 내용에 대해 정리하고 넘어가야 겠다 싶어 정리하는 글 이다. 우선 @RequestBody에서 어떤 방식으로 객체를 생성하는 지 파악한 후, 해당 객체에 값을 어떤 방식으로 binding blogshine.tistory.com https://blogshine.tistory.com/446 [Spring] @RequestBo..
-
[Lombok] @Builder와 @AllArgsConstructor 사용시 주의사항개발 지식/기타 2023. 11. 21. 14:45
- 클래스 내에서 특정 필드의 값을 초기화 시킨 후 @Builder와 @AllArgsConstructor를 사용하여 객체를 생성할 때 이미 초기화가 된 필드를 제외하는 경우 그 필드의 값은 다시 null로 초기화가 된다. 예시 코드 @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Builder @AllArgsConstructor @Entity public class Member extends Auditable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long memberId; @Column(nullable = false, length = 100) private Strin..
-
[Spring] 데이터 바인딩(Data Binding)과 이와 관련된 예외개발 지식/Spring 2023. 11. 20. 15:52
데이터 바인딩 - 데이터 바인딩은 사용자 입력이나 외부 데이터를 애플리케이션의 도메인 모델과 연결하는 프로세스를 말한다. - 이는 주로 웹 애플리케이션에서 사용자의 HTTP 요청 데이터를 처리하는 데에 사용된다. cf. 역직렬화 - JSON을 자바 객체로 변환하는 과정인 역직렬화의 경우 데이터 바인딩의 한 예시라고 볼 수 있다. 스프링 프레임워크에서는 데이터 바인딩이 주로 두 가지 상황에서 일어난다. 1. HTTP 요청의 데이터를 객체로 변환 - 사용자가 웹 애플리케이션에 요청을 보낼 때, 이 요청에는 주로 URL 쿼리 파라미터, HTTP 헤더, 본문 등의 데이터가 포함된다. 이러한 데이터를 자바 객체로 변환하는 것이 데이터 바인딩이다. @RestController public class MyContro..
-
[Java] 가변인자 (varargs)개발 지식/Java 2023. 11. 15. 14:00
가변인자란? - jdk 1.5부터 지원하는 기능으로 매개변수의 개수를 동적으로 지정해 줄 수 있게 하는 기능을 의미한다. - 가변인자는 타입... 변수명 과 같은 형식으로 선언한다. 가변인자의 특징 - 가변인자는 매개변수 중에서 가장 마지막에 선언해야 한다. (마지막이 아닌 경우 구별할 수 없기 때문) - 인자가 아예 없는 경우와 배열을 인자로 받는 경우도 가능하다. - 내부적으로 배열을 이용하기 때문에 선언된 메서드를 호출할 때마다 배열이 새로 생성된다. - 오버로딩시 애매한 상황이 발생할 수 있기 때문에 가급적 오버로딩하지 않는 것이 좋다. public class Main { public static void main(String[] args) { System.out.println(concatenat..
-
[Java] 배열과 List 사이의 변환개발 지식/Java 2023. 11. 15. 12:10
배열 -> List - 아래의 1번과 2번 방식에서 Arrays.asList를 List.of로 변경하여도 동작하지만 조금의 차이가 발생한다. - 둘의 차이점은 아래의 글에 정리해두었다. https://prospective-developer-seo.tistory.com/111 [Java] Arrays.asList()와 List.of()의 차이 공통점 - 매개변수로 가변인자를 받아서(여러 요소나 배열도 가능) list를 반환한다. - 리스트의 크기를 변경할 수 없다. 차이점 변경 가능 여부 - Arrays.asList()로 반환된 list는 변경이 가능하지만 Li prospective-developer-seo.tistory.com 1. Arrays.asList(array) - 이 경우 고정길이의 List가 ..
-
[Java] Arrays.asList()와 List.of()의 차이개발 지식/Java 2023. 11. 15. 12:08
공통점 - 매개변수로 가변인자를 받아서(여러 요소나 배열도 가능) list를 반환한다. - 리스트의 크기를 변경할 수 없다. 차이점 변경 가능 여부 - Arrays.asList()로 반환된 list는 변경이 가능하지만 List.of()에서 반환된 list는 변경이 불가능하다. - 그 이유는 Arrays.asList()는 Arrays의 내부 클래스인 ArrayList를 반환하고, 여기에는 set 등이 구현되어 있지만 List.of()는 ListN이라는 타입의 객체를 반환하는데, 이는 불변 객체(Immutable object)이기 때문에 수정할 수 없다. (ListN 타입은 정확하게는 ImmutableCollections.ListN 타입이다) Null 허용 여부 - Arrays.asList()는 null을..