처음코드는
전체조회만 생각한 코드였음.
근데 과제 중에 작성자명으로 조건 조회가 가능하도록 하라고 되어있었음.
작성자명으로 조건조회 할수도있고, 그냥 전체조회만 할 수 있는 메서드가 필요했음.
너무 어려웠당..
1) 처음 코드
@GetMapping("/schedules")
public ResponseEntity<List<GetScheduleResponse>> getSchedules() {
return ResponseEntity.status(HttpStatus.OK).body(scheduleService.findAll());
}
@Transactional(readOnly = true)
public List<GetScheduleResponse> findAll() {
List<Schedule> schedules = scheduleRepository.findAll(Sort.by(Sort.Direction.DESC, "modifiedDate"));
List<GetScheduleResponse> dtos = new ArrayList<>();
for (Schedule schedule : schedules) {
GetScheduleResponse dto = new GetScheduleResponse(schedule.getId(), schedule.getTitle(), schedule.getContent(), schedule.getName());
dtos.add(dto);
}
return dtos;
}
2)
작성자명으로 조회 조건을 위해
@RequestParam 사용
(required = false)는 조건이 필수가 안되도록 하는 옵션
@GetMapping("/schedules")
public ResponseEntity<List<GetScheduleResponse>> getSchedules(@RequestParam(required = false) String name) {
return ResponseEntity.status(HttpStatus.OK).body(scheduleService.findAll(name));
}
이름으로 조건조회 할수도 있고 안할수도 있기 때문에
if문을 통해 두가지로 나눴다. 조건조회를 안하면 null 값으로 들어옴
반복되는 부분은 리팩토링으로 최대한 줄여줬다.
어려웠던 부분은 이름으로만 전체조회하는 레포지토리의 메서드를 찾는거였는데,
레포지토리에 findAllByName이라는 메서드를 만들었음.
@Transactional(readOnly = true)
public List<GetScheduleResponse> findAll(String name) {
List<Schedule> schedules;
List<GetScheduleResponse> dtos = new ArrayList<>();
GetScheduleResponse dto;
if (name == null) {
schedules = scheduleRepository.findAll(Sort.by(Sort.Direction.DESC, "modifiedDate"));
} else {
schedules = scheduleRepository.findAllByName(name, Sort.by(Sort.Direction.DESC, "modifiedDate"));
}
for (Schedule schedule : schedules) {
dto = new GetScheduleResponse(schedule.getId(), schedule.getTitle(), schedule.getContent(), schedule.getName());
dtos.add(dto);
}
return dtos;
}
레포지토리
public interface ScheduleRepository extends JpaRepository<Schedule, Long> {
List<Schedule> findAllByName(String name, Sort sort);
}'트러블슈팅' 카테고리의 다른 글
| Session 로그인 적용하면서 API 구조 리팩토링하기 (0) | 2026.07.09 |
|---|---|
| [IntelliJ IDEA 기능] Compact Middle Packages / 패키지 설정 (0) | 2026.07.07 |
| ArrayList 기반 장바구니 구현 (0) | 2026.06.16 |
| [Java] Scanner 사용 시 nextInt(); 주의점! (0) | 2026.06.04 |
| 💻 Git 브랜치 작업하면서 겪은 트러블슈팅 정리 (0) | 2026.06.01 |