[Spring (4)] HTTP 요청 처리 관련 "백엔드 쪽" Error Case (Day 50~52)

코딩기록·2024년 12월 17일

1. Ambigous Mapping

  • 에러 메시지 : Ambigous Mapping
  • 에러 발생 원인 : 같은 Path에 대한 @RequestMapping이 2개 이상 존재
    -- 예시) @GetMapping("/books")을 2개 생성했을 때

2. HashMap.remove(key)의 반환 값

  • 코드
 @DeleteMapping("/{id}")
    public String deleteBook(
            @PathVariable("id") Long id
    ) {
        Book1 isRemoved = bookList.remove(id);
        System.out.println(isRemoved);
        // ! 에러 발생 부분
        if (isRemoved == false) {
            return "없는 책이라 못 지우는데요?";
        } else {
            return "이 책을 지웠어요 -" + id;
        }
    }
  • 에러 메시지 :
error: bad operand types for binary operator '=='
        if (isRemoved == false) {
  -> 잘못된 연산자 타입입니다.
  -> 왼쪽과 오른쪽의 데이터 타입이 다르다.
  • 에러 해석 : 잘못된 연산자 타입입니다.
  • 에러 발생 사유 : bookList(해쉬맵).remove(id)를 하면 반환되는 값은 삭제된 객체거나 혹은 삭제되지 않았으면 null인데, 이걸 boolean 타입인 false랑 비교함



3. fetch() path 제대로 쓴 것 같은데 연결이 안 될 때

  • 코드 : fetch 주소가 이상하게 뜸
         const response = await fetch("/api/v1/boards/\${selectedId}", {
            method: 'DELETE'
          });
  • 에러 : 연결 안되면서 url path 가 이상하게 뜸

  • 에러 원인 : fetch 안의 인자에 ${}을 사용하려면 백틱(``)으로 감싸야 하는데, ""으로 감쌌음

4. Javascript에서 메소드 정의 시 name='mj' 이런식으로 되어 있을 때 ''는 뭐지??

-> argument 입력 안 할 시 기본 설정 값

      // ! 밑에 메소드에서 생성자에 '='id''은 뭐지???
     async function fetchGetScores(sortType='id') {
            const res = await fetch(API_URL + `?sort=\${sortType}`);
            const data = await res.json(); // json 으로 받아온 내용을 객체로 변환환
            console.log(data);

            // 화면에 정보 렌더링
            renderScoreList(data);
        }

5. 프론트에 객체로 데이터를 보냈는데, 프론트에서 fetch 해오면 데이터가 안 가져와 지는 경우

1) 문제 상황

: (윗 코드) 아래와 같이 id, title, content, date를 필드로 갖는 BoardDetailDto을
(아래코드) 프론트에 ResponseEntity로 전달해주었는데,
(문제상황) 프론트에서 Fetch 해서 데이터를 받아오니 데이터가 비어 있음

public class BoardDetailDto {

  private Long id; // 글번호
  private String title; //제목
  private String content; //내용

  @JsonFormat(pattern="yyyy-MM-dd")
  private LocalDateTime date; //작성일시

  public BoardDetailDto(Board board) {
      this.id = board.getId();
      this.title = board.getTitle();
      this.content = board.getContent();
      this.date = board.getRegDateTime();
  }
}
 // ## 게시물 상세조회 ##
  @GetMapping("/{id}")// "/api/v1/boards/{id}"
  public ResponseEntity<?> findBoard(
          @PathVariable Long id
  ) {
      // 데이터베이스(Map)에서 해당 아이디를 가진 board 객체 가져오기
      Board targetBoard = boardStore.get(id);

      // 해당 id가 없는 경우, 없는 id 라고 메시지 보내기
      if(targetBoard == null) {
          return ResponseEntity
                  .status(404)
                  .body("없는 아이디입니다: id - " + id);
      }

      // 있는 아이디인 경우, BoardDetailDto로 변환해주기
      BoardDetailDto boardDetailDto = new BoardDetailDto(targetBoard);
      System.out.println(boardDetailDto);
      return ResponseEntity
              .ok()
              .body(boardDetailDto);
  }

2) 문제 발생 원인

  • 서버에서 클라이언트에 객체를 전달할 때,
    객체는 객체 그대로 보내는 게 아니라 직렬화하여 JSON으로 변환하여 보내야 됨.
    이 때, Jgetter 메서드를 사용함.

3) 해결방법 : DTO에 @Getter 추가

0개의 댓글