@RequestParam 설정
- @RequestParam을 사용한 코드를 PostMan을 통해 테스트 할 때 params값이 없을 경우 에러가 발생
@GetMapping("/admin/users")
public ResponseEntity<Page<GetUserResponse>> getUsers(
@RequestParam String keyword,
@PageableDefault Pageable pageable,
@RequestParam(defaultValue = "1") int page,
@RequestParam UserStatus status
) {
Pageable converted = PageRequest.of(
page - 1,
pageable.getPageSize(),
pageable.getSort()
);
return ResponseEntity.ok(userService.findAllUsers(keyword, converted, status));
}
- @RequestParam에 디폴트 값인 (required = true)로 적용되어 null일 경우 오류가 발생하여 해당 부분을 수정
@GetMapping("/admin/users")
public ResponseEntity<Page<GetUserResponse>> getUsers(
@RequestParam(required = false) String keyword,
@PageableDefault Pageable pageable,
@RequestParam(defaultValue = "1") int page,
@RequestParam(required = false) UserStatus status
) {
Pageable converted = PageRequest.of(
page - 1,
pageable.getPageSize(),
pageable.getSort()
);
return ResponseEntity.ok(userService.findAllUsers(keyword, converted, status));
}
- Service 코드
- null 객체에 .contain() 메서드에 null 을 입력하여 npe 발생하여 수정
---before---
@Transactional(readOnly = true)
public Page<GetUserResponse> findAllUsers(String keyword, Pageable pageable, UserStatus status) {
Page<User> users;
if (keyword.contains("@")) {
users = userRepository.findByEmailKeyword(keyword,pageable,status);
} else {
users = userRepository.findByNameKeyword(keyword,pageable,status);
}
return users.map(user -> new GetUserResponse(
---after---
@Transactional(readOnly = true)
public Page<GetUserResponse> findAllUsers(String keyword, Pageable pageable, UserStatus status) {
String searchKeyword = (keyword == null || keyword.isEmpty()) ? null : keyword;
Page<User> users;
if (searchKeyword != null && searchKeyword.contains("@")) {
users = userRepository.findByEmailKeyword(searchKeyword,pageable,status);
} else {
users = userRepository.findByNameKeyword(searchKeyword,pageable,status);
}
return users.map(user -> new GetUserResponse(
- @RequestParam(required = false)를 통해 해당 param이 null 이어도 오류를 내지 않고 if (searchKeyword != null && searchKeyword.contains("@")) 와 같이 .contain이 작동하기 전 null 인지 확인하여 .contain 에 null 이 들어가 NPE가 발생하는것을 방지하는 방어코드를 작성하여 오류를 해결했다.