-
Get 요청에서는 Body로 데이터를 받으면 안된다프로젝트/나날이 2023. 11. 17. 19:08
@GetMapping public GarmentResponseDto Garment(@RequestBody GarmentRequestDto request) { // 코드 생략 }
처음 설계를 할 때에는 Garment를 조회하는 함수에서 데이터를 받을 때 @RequestBody로 temp, uv, rain, sex등의 데이터를 받았다. postman으로 테스트 했을 때에도 문제가 없어서 괜찮은줄 알았다.
그런데 프론트엔드 개발자에게서 GetMapping을 할 때 body로 통신을 할 수 있냐는 질문을 받았다.
찾아보니 Http Get Method에는 body가 없는게 표준 스펙이라고 했다.
아주 예외적으로 현업에서 파라미터가 너무 많으면 post method를 열어두고 body로 받기는 하지만 선호하는 방식은 아니라고 한다.
@RequestParam으로 변경
@GetMapping public GarmentResponseDto Garment(@RequestParam Double temp, @RequestParam Double uv, @RequestParam Double rain, @RequestParam Sex sex) { List<Garment> outers = garmentService.findOuters(temp, uv, rain, sex); List<Garment> tops = garmentService.findTops(temp, uv, rain, sex); List<Garment> pants = garmentService.findPants(temp, uv, rain, sex); List<Garment> shoes = garmentService.findShoes(temp, uv, rain, sex); List<GarmentDto> outerList = outers.stream() .map(o -> GarmentDto.convert(o)).collect(Collectors.toList()) List<GarmentDto> topList = tops.stream() .map(t -> GarmentDto.convert(t)).collect(Collectors.toList()); List<GarmentDto> pantsList = pants.stream() .map(p -> GarmentDto.convert(p)).collect(Collectors.toList()); List<GarmentDto> shoesList = shoes.stream() .map(s -> GarmentDto.convert(s)).collect(Collectors.toList()); return new GarmentResponseDto(outerList, topList, pantsList, shoesList); }
@RequestBody가 아니라 @RequestParam을 통해 데이터를 변경받는걸로 대체했고, 잘 되는 것을 확인했다.
예전부터 무신사같은 사이트에서 조건으로 검색할 때 쿼리에다가 ?를 이용해서 파라미터로 조건을 넣어두는 것이 궁금했는데 이런 이유였다.
개발을 할 때 내가 사용하는 툴에서 데이터가 들어가고 나온다고 끝내는 것이 아니라 다른 개발자와의 통신도 고려해야 한다. 이번 경우에도 프론트엔드 개발자가 안된다고 알려주기 전까지는 HTTP Get 형식의 규약같은거는 알지 못했다. 혼자 하는 프로젝트가 아니라 협업이기 때문에 나뿐만 아니라 다른 사람들과의 커뮤니케이션도 신경쓰는 백엔드 개발자가 되어야겠다.
'프로젝트 > 나날이' 카테고리의 다른 글
나날이 백엔드 CI-CD 구축의 과정 (0) 2023.11.20 옷 사진 데이터 설계 방식에 대한 고민 (0) 2023.10.29 실시간 날씨 open api 활용 (0) 2023.10.27