[Project] 2차 프로젝트 - Error: 관리자-도서 수정 요청 에러 (해결)

김호정's avatar
Oct 25, 2024
[Project] 2차 프로젝트 - Error: 관리자-도서 수정 요청 에러 (해결)
 

도서 등록 후 해당 등록된 도서 수정 후 요청을 할때 Error Return

notion image
 
 

문제 원인

💡
  • isbn13으로 도서 조회 시 도서가 정상적으로 조회되지 않거나 입력 값 잘못 전달 가능성
 

1. isbn13 확인

💡
  • AdminController에서 @PathVariable로 전달되는 isbn13 값이 Book_tb의 isbn13값과 일치해야 조회 가능
  • 즉 해당값이 db의 isbn13 값과 일치하지 않아서 해당 Error Msg가 반환 됐을 수 있음
  • Controller의 해당 매핑부분에 로그 추가
@PutMapping("/api/admins/{isbn13}/update") public ResponseEntity<?> updateBook(@PathVariable String isbn13, @RequestBody BookRequest.UpdateDTO updateDTO) { System.out.println("Received ISBN13: " + isbn13); // isbn13 값 확인 BookResponse.BookDetailDTO updateBook = bookService.도서업데이트(isbn13, updateDTO); return ResponseEntity.ok(Resp.ok(updateBook)); }
notion image
→ 정상적으로 출력됨
 

2. BookRepository에서 isbn13 조회 문제

💡
  1. 현재 BookRespository에서 findById 메소드 사용중
  1. 이 메소드는 기본적으로 Long 타입의 ID로 조회되는 것이 기본적이므로 String 타입의 isbn13을 사용할 때 문제가 될 수 있음
  • BookService 수정 (findById → findByIsbn13)
// 도서 수정 public BookResponse.BookDetailDTO 도서업데이트(String isbn13, BookRequest.UpdateDTO dto) { Book book = bookRepository.findByIsbn13(isbn13) .orElseThrow(() -> new ExceptionApi400("도서를 찾을 수 없습니다.")); // findByIsbn13 사용 // 카테고리 조회 Category category = categoryRepository.findById(dto.getCategoryId()) .orElseThrow(() -> new ExceptionApi400("카테고리를 찾을 수 없습니다.")); // 도서 정보 업데이트 book.update(dto, category); bookRepository.save(book); return new BookResponse.BookDetailDTO(book); }
 
  1. BookRepository 확인
// 카테고리 조회 Category category = categoryRepository.findById(dto.getCategoryId()) .orElseThrow(() -> new ExceptionApi400("카테고리를 찾을 수 없습니다."));
→ 이렇게 해도 여전히 update 요청 시 도서를 못 찾음. 그래서 혹시 등록이 잘 된 건가 싶어서 해당 isbn13으로 조회를 해보니..
notion image
아예 등록조차 안된것.
 

해결

💡
  • BookService에서 해당 등록과 수정 로직 상단에 @Transactional 등록하니 해결…
  • Transaction 부분을 다시 제대로 짚어야 겠다.
Share article

keepgoing