반응형
어제 게시글 목록 조회 API를 작성하던 중 NullPointerException 을 만났다.
@GetMapping
public ResponseEntity<RootResponse<Page<PostDetailResponse>>> getPosts(
Pageable pageable,
@RequestParam(name = "query", required = false) String query) {
Page<PostDetailResponse> postList = postService.getPosts(pageable, query);
return ResponseEntity.ok(RootResponse.<Page<PostDetailResponse>>builder()
.data(postList)
.build());
}
http://localhost:8080/api/posts?page=0&size=2
위 링크로 postman 으로 테스트 하니,
{
"timestamp": "2023-12-07T11:21:07.496+00:00",
"status": 500,
"error": "Internal Server Error",
"trace": "java.lang.NullPointerException: Cannot invoke \"String.isBlank()\" because \"query\" is null,
"message": "Cannot invoke \"String.isBlank()\" because \"query\" is null",
"path": "/api/posts"
}
500으로 주는 것을 알 수 있다.
public Page<PostDetailResponse> getPosts(Pageable pageable, String query) {
if (query.isBlank()) {
return postRepository.findAll(pageable)
.map(post -> PostDetailResponse.of(post, commentRepository, postLikeRepository));
}
return postRepository.findAllByContentContaining(query, pageable)
.map(post -> PostDetailResponse.of(post, commentRepository, postLikeRepository));
}
서비스 코드는 다음과 같았는데,
java.lang.NullPointerException: Cannot invoke "String.isBlank()" because "query" is null
라는 에러가 뜨는 것을 보면, query가 null이라는 것인데, 이유는 컨트롤러에서 required 가 false 로 해두면 null 값이 자동으로 기본값 ""이 될줄 가정했는데 그게 아니었다.
그래서 defaultValue를 "" 로 해주니 정상 작동했다.
@GetMapping
public ResponseEntity<RootResponse<Page<PostDetailResponse>>> getPosts(
Pageable pageable,
@RequestParam(name = "query", required = false, defaultValue = "") String query) {
Page<PostDetailResponse> postList = postService.getPosts(pageable, query);
return ResponseEntity.ok(RootResponse.<Page<PostDetailResponse>>builder()
.data(postList)
.build());
}
반응형
'TIL ✍️' 카테고리의 다른 글
23년 12월 12일(화요일) - 50번째 TIL : 정규 표현식 Positive lookahead (0) | 2023.12.12 |
---|---|
23년 12월 8일(금요일) - 48번째 TIL : intellij file encoding change (0) | 2023.12.08 |
23년 12월 6일(수요일) - 46번째 TIL (0) | 2023.12.06 |
23년 12월 5일(화요일) - 45번째 TIL : AOP (1) | 2023.12.05 |
23년 12월 4일(월요일) - 44번째 TIL (2) | 2023.12.04 |