postman을 통한 http 메시지 다루기

2023. 6. 19. 17:09네트워크

스프링에서 http 메시지를 다루는 연습을 해보겠습니다. 해당 과정에서는 postman을 활용해서 실습을 진행했습니다. 

 

https://www.postman.com/

 

Postman API Platform | Sign Up for Free

Postman is an API platform for building and using APIs. Postman simplifies each step of the API lifecycle and streamlines collaboration so you can create better APIs—faster.

www.postman.com

 

import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

@Slf4j  // log 변수 만들어준다.
@Controller
public class MappingController {

    // http://localhost:8080/path로 오는 요청에 대해서 메소드를 실행하고 싶을 때
//    @RequestMapping(value = "/path", method = RequestMethod.GET)
    @GetMapping("/path")
    public String getPath() {
        log.info("GET /path");
        return "index";
    }

    // '/path'로 오는 post 요청에 대해서 메소드를 실행하고 싶을 때

//    @RequestMapping(value = "/path", method = RequestMethod.POST)
    @PostMapping("/path")
    public String postPath() {
        log.info("POST /path");
        return "index";
    }

    // 'path'로 오는 put 또는 delete 요청에 대해서

    @RequestMapping(value = "/path", method = {RequestMethod.PUT, RequestMethod.DELETE})
    public String putOrDeletePath() {
        log.info("PUT, DELETE /path");
        return "index";
    }

    // 'path'로 오는 post 요청이면서 json 데이터를 포함하는 요청에 대하여 메소드를 실행

//    @RequestMapping(value = "/path", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
    @PostMapping(value = "/path", consumes = MediaType.APPLICATION_JSON_VALUE)
    public String consumes() {
        log.info("POST /path Content-type: application/json");
        return "index";
    }

    // 'path'로 오는 POST 요청이면서 헤더에 x-likelion이라는 값이 hello로 지정되어 있을때 메소드를 실행
//    @RequestMapping(value = "/path", method = RequestMethod.POST, headers = "x-likelion=hello")
    @PostMapping(value = "/path", headers = "x-likelion=hello")
    public String headerWith() {
        log.info("Post /path with x-likelion=hello");
        return "index";
    }

    // 'path'로 오는 post요청이면서 쿼리파라미터로 likelion이 hello로 할당되어 있을 때 메소드 실행
//    @RequestMapping(value = "/path", method = RequestMethod.POST, params = "x-likelion=hello")
    @PostMapping(value = "/path", params = "x-likelion=hello")
    public String params() {
        log.info("POST params");
        return "index";
    }


}

 

json 방식으로 넘겨줄 때 body -> raw -> json으로 변경해준후 값을 넣어주면 된다.

 

headers에 key, value 형태로 넘겨주면 된다.

 

params에서 key, value형태로 넘겨주면 된다.

 

log를 통해 정상적으로 동작이 되었는지 확인을 해보자

 

import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Controller;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestHeader;

import java.util.List;
import java.util.Map;

@Slf4j
@Controller
public class HeaderController {

    // header-one으로 들어온 http 요청에 대하여 헤더 중 'x-like-lion'이라는 헤더의 값을 인자로 전달받고 싶을 때
    @PostMapping("/header-one")
    public String getHeader(@RequestHeader("x-likelion") String header) {
        log.info("POST /header-one header: " + header);
        return "index";
    }

    // header-optional로 들어온 http 요청에 대하여 헤더 중 'x-like-lion'이 있으면 할당, 없으면 null로 받고 싶을 때
    @PostMapping("/header-optional")
    public String getHeaderOptional(@RequestHeader(value = "x-likelion", required = false) String header /*Optional<String>*/) {
        log.info("POST /header-optional header: " + header);
        return "index";
    }

    //'header-type'으로 들어온 http 요청에 대하여 'x-likelion-int'가 있으면 integer에 할당
    @PostMapping("/header-type")
    public String getHeaderInteger(@RequestHeader(value = "x-likelionint") Integer header) {
        log.info("POST /header-type header: " + header);
        return "index";
    }

    // 'header-all'로 들어온 http 요청의 모든 헤더를 확인하고 싶을 때
    @PostMapping("/header-all")
    public String getHeaderAll(/*@RequestHeader Map<String, String> headerMap*/
                                /*@RequestHeader MultiValueMap<String, String> headerMap*/
                                @RequestHeader HttpHeaders headerMap) {
        /*for (Map.Entry<String, String> entry: headerMap.entrySet()) {
            log.info(String.format("%s: %s", entry.getKey(), entry.getValue()));
        }*/

        for (Map.Entry<String, List<String>> entry: headerMap.entrySet()) {
            log.info(String.format("%s: %s", entry.getKey(), entry.getValue()));
        }

        return "index";
    }


}

@RequestHeader를 통해 값을 넣어준다.

 

@RequestHeader(value = "x-likelion", required = false) String header /*Optional<String>*/

required값을 false로 하면 값이 없을 경우 null이 나온다.

 

Header에 Integer형의 값을 보낸다.

 

/*@RequestHeader Map<String, String> headerMap*/
                            @RequestHeader MultiValueMap<String, String> headerMap
                            /*@RequestHeader HttpHeaders headerMap*/

@RequestHeader에 value값이 없으면 모든 header값을 가져온다.

Map은 키,값 형태로 가져오고 MultiValueMap은 같은 키에 여러개의 값이 들어올 경우 List형태로 여러개를 받을 수 있도록 해준다.

 

 

간단하게 포스트맨 사용방법에 대해 정리해봤습니다. 잘못 알고 있고나 보충해주실 내용이 있으면 편하게 댓글 달아주세요. 감사합니다.

'네트워크' 카테고리의 다른 글

캐시와 조건부 요청 정리  (0) 2023.06.19
http 기본  (0) 2023.06.12
uri와 웹 브라우저 흐름 정리  (0) 2023.06.11
인터넷 네트워크 정리- ip, tcp, udp, port, dns  (0) 2023.06.11