본문 바로가기
공부/Trouble Shooting

PostMan 이용해서 Http Post요청 보내기 + Json 형식 요청 보내기

by son_i 2023. 9. 18.
728x90

인텔리제이 무료버전을 쓰고 있어서 강의와 같은 작업이 안됐다.

 

근데 일단 이런코드로 요청을 해봤는데

package com.example.WebSample.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

@Slf4j
@RestController
public class SampleController {

    @GetMapping(value = "/order/1")
    public String getOrder() {
        log.info("Get some order");
        return "orderId : 1, orderAmount:1000";
    }

    @PostMapping("/order")
    public String createOrder() {
        log.info("Create order");
        return "order created -> orderId:1, orderAmount:1000";
    }
}

 

PostMapping 에서는 이런 오류가 발생하였다.

2023-09-18 21:37:51.567  WARN 7968 --- [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'GET' not supported]

에러는 405 발생

 

문득 이유가 궁금해졌다. 너무 별 거 아닐 수도 있지만 .. 나는 처음 배워서 잘 모르기 때문에

일단 @PostMapping은 데이터를 전송한다는 의미인데 전송해주는 것이 없어서 오류가 발생하나 ? 라는 생각이 먼저.

 

- 구글링을 통한 원인

지정된 http method에 맞지 않게 api를 사용해서 그렇다.

특히 405 에러는 Method Not Allowed 를 나타내는 에러이다. 허용되지 않은 Http Method를 사용할 때 발생하는 status code

흠.. 그래도 아직 잘 이해가 가지 않는다.

 

더 찾아보니까 GET 방식으로 접속을 시도했는데@PostMapping이 되어있어서 그런다고 한다.

-> 그니까 Post 방식의 요청을 받겠다고 했는데 GET요청이 들어왔다는 것 

음.. GET 방식의 요청이 뭘까 ? url에 직접 입력하여 들어가는 것을 의미하는 건가

 

 

=> ㅇㅇ 맞다 !

내가 접속할 때는 url에 파라미터를 붙여서 갔기 때문에 get 방식으로 인식이 된 건데 매핑은 Post로 하고있으니 오류가 났던 것 !


PostMan을 이용해서 Post 방식의 요청을 해보긴 했다.
이 블로그 참조

https://parkjh7764.tistory.com/212

 

[POSTMAN] 포스트맨 설치 및 사용법 / POSTMAN request 요청해보기

Contents 포스트맨(POSTMAN)이란? POSTMAN은 API 개발 및 테스트를 위한 인기있는 협업 도구입니다. 웹 기반으로 제공되며, 개발자들이 API를 디자인하고 문서화하며, 테스트하고 공유하는 데 사용됩니다

parkjh7764.tistory.com

 

return 해줬던 문자열이 잘 나오는 것을 확인하였다.


<JSON 형식 요청 보내기>

요청 보내는 코드 

 @PostMapping("/order")
    public String createOrder
            (@RequestBody CreateOrderRequest createOrderRequest,
             @RequestHeader String userAccountId) {
        log.info("Create order : " + createOrderRequest +
                ", userAccountedId : " + userAccountId);
        return "orderId :" + createOrderRequest.getOrderId() +
                ", orderAmount:" + createOrderRequest.getOrderAmount();
    }
    
    @Data
    public static class CreateOrderRequest {
        private String orderId;
        private Integer orderAmount;
    }

/order로 접근했을 때 param에 key와 value로 보내주는 것이 아니라 json 형태로 본문에 담아서 보내야한다.

 

Body 탭에서 raw에 json 형태로 작성. 오른쪽에 옵션이 text로 되어있는데 꼭 JSON으로 바꿔야함 !

@RequestHeader로 받아줄 값은 Headers 탭에 작성.

잘 받아진다.

 

@RequestBody를 쓰면 json을 이용해서 엄청 큰 데이터도 받을 수 있다.

Get 방식으로 url로 받다보면 전송하는 데이터가 다 드러나게 되고 url 최대 범위를 넘어가버릴 수도 있다.