2022년 3월 1일 기록
✔︎ @ModelAttribute
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class PageParamsDto {
@Min(0)
@NotNull
private int page;
@Min(1)
@NotNull
private int perPage;
}
위의 경우 query parameter로 넘어온 data가 바인딩 되지 않는 문제를 겪었다. 이러한 문제가 발생한 이유는 아래와 같다.
Spring의 경우 URL 파라미터 또는 POST Form Data 형태의 파리미터를 커맨드 객체에 바인딩한다. 이 때 다음 2가지 규칙을 따른다고 한다.
1. NoArgsConstructor과 AllArgsConstructor 둘 다 있는 경우
NoArgsConstructor 호출하고, setter 호출하여 param을 필드에 각각 초기화한다2. AllArgsConstructor만 있는 경우
AllArgsConstructor 호출하여 param을 필드에 각각 초기화한뒤, setter 호출하여 param을 필드에 각각 다시 초기화하여 덮어 씌운다.
즉 나의 경우 NoArgsConstructor과 AllArgsConstructor 둘 다 있지만 setter가 없어 데이터가 제대로 바인딩되지 않는 문제가 발생한 것이다. 따라서 기존 코드에서 NoArgsConstructor를 제거하여 다음과 같이 수정하였다.
@Getter
@AllArgsConstructor
public class PageParamsDto {
@Min(0)
@NotNull
private int page;
@Min(1)
@NotNull
private int perPage;
}
이해가 안된 다면 이분의 글을 보자!!
참고
- https://steady-coding.tistory.com/489
- https://velog.io/@yshjft/2021%EB%85%84-12%EC%9B%94-17%EC%9D%BC-%EA%B8%B0%EB%A1%9D
✔︎ ObjectMapper & DTO
JSON을 DTO로 DTO를 JSON으로 매핑할 때 ObjectMapper가 사용된다. 이러한 과정에서 ObjectMapper는 기본 생성자와 Setter 또는 Getter(Getter 추천)가 필요하기에 DTO는 기본 생성자와 Getter 또는 Setter가 있어야한다.
참고
- https://bactoria.github.io/2019/08/16/ObjectMapper%EB%8A%94-Property%EB%A5%BC-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%B0%BE%EC%9D%84%EA%B9%8C/
- https://velog.io/@conatuseus/RequestBody%EC%97%90-%EC%99%9C-%EA%B8%B0%EB%B3%B8-%EC%83%9D%EC%84%B1%EC%9E%90%EB%8A%94-%ED%95%84%EC%9A%94%ED%95%98%EA%B3%A0-Setter%EB%8A%94-%ED%95%84%EC%9A%94-%EC%97%86%EC%9D%84%EA%B9%8C-3-idnrafiw
✔︎ 테스트 관련 annotation
- @BeforeAll
- 테스트 클래스를 초기화할 때 딱 한번 수행되는 메서드
- static으로 작성되야 한다
- @BeforeEach
- 테스트 메스드 실행 이전에 수행된다
- @AfterAll
- 테스트 클래스 내 테스트를 모두 실행시킨 후 딱 한번 수행되는 메서드
- static으로 작성되어야한다
- @AfterEach
- 테스트 메서드 실행 이후에 수행
- @Disabled
- 해댕 테스트 메서드를 무시한다
참고
✔︎ lenient()
테스트시 사용되지 않을 가능성이 있는 stub에 적용한다. 이를 통해 Unnecessary Stubbing Exception 발생을 해결할 수 있다.
ex) lenient().when(~~)
참고
Author And Source
이 문제에 관하여(2022년 3월 1일 기록), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yshjft/2022년-3월-1일-하루-기록저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)