본문 바로가기
IT이야기/LANGUAGE

[JAVA / SpringBoot] Controller와 POSTMAN 테스트 예시(DTO, LIST, RequestPart, Multipart)

by JI_NOH 2024. 1. 19.

프로젝트를 진행하면서 백/프론트 서버를 나눠서 개발하다보니

혼자서 타임리프로 프론트 개발하여 통신방식을 테스트할 수가 없어서 포스트맨을 드디어 제대로 써보게 되었다.

 

다만, 이 때 컨트롤러 아규먼트의 데이터 타입이 여러가지다보니

포스트맨에서는 어떻게 예시데이터를 싣어서 보내야 하는지 찾는게 힘들었었다.

 

그래서 이번 기회에 정리를 해 둔다.

 

목차

     

     

    1. PathVariable

    - Controller

    public ResponseEntity<?> testMethod(@PathVariable Long id)
     

    가장 기본적인 url에 필요한 값을 싣어 보내는 방식이다.

     

    -  PostMan

    http://localhost:8080/api/v1/items/{id}
     

    단순히 해당 컨트롤러 URL에 마지막 id값만 붙여서 테스트 해주면 된다.

     

     

     

     

    2. RequestParam

    - Controller

    public ResponseEntity<?> testMethod2( @RequestParam(required = false) String name,
                                          @RequestParam(required = false) String detail)
     

    PathVariable과 살짝 유사하지만 url에 해당 변수명과 값을 쌍으로 입력해서 보내줘야하는게 조금 다르다.

    필요에 의하면 여러 RequestParam을 설정할 수 있으며 필수값이 아니라면 required=false 설정을 해주면 되겠다.

     

     

    - PostMan

    http://localhost:8080/api/v1/items/search?name=값&detail=값
     
     

     

     

     

     

    3. RequestBody

    CASE1.

    - Controller

    public ResponseEntity<?> testMethod3(@RequestBody TestDTO test)
     

    우리가 프론트와 통신하기 위해 만든 DTO형태로 값을 받을 때 보통 RequestBody로 많이 받아온다.

    Json으로 작성해서 보낸 내용을 자바에서 쓸 수 있게끔 매칭해주는 좋은 어노테이션이다.

    URL은 변동사항이 없다.

     

    - PostMan

    {
        "id":값,
        "count":값
    }
     

    PostMan에서 Body - raw에 Json형태로 TestDTO와 같은 매칭으로 셋팅해주면 되겠다.

    "키":"값" 이 기본형태이나 숫자형이라면 숫자로만 보내도 된다.

     

     

    CASE2.

    - Controller

    public ResponseEntity<?> testMethod4(@RequestBody List<TestDTO> test)
     

    이번에는 List DTO로 넘겨받아야할 경우가 있겠다. 여러가지 상품을 추가한다거나 등등?

     

    - PostMan

    [
    {
        "id":50,
        "count":2
    },
    {
        "id":2,
        "count":1
    }
    ]
     
     

    똑같이 json으로 보내기에 raw셋팅을 하나 리스트의 경우는 [ ] 안에 내용들을 감싸서 보내주면 된다.

     

     

     

    4. RequestPart

    - Controller

    public ResponseEntity<?> testMethod5(@RequestPart("key") TestDTO test,
          @RequestPart(value = "files", required = false) List<MultipartFile> files)
     

    이제 이미지파일, 텍스트파일같은 것들을 첨부하게 되면 RequestPart 라는 어노테이션을 사용하게 된다.

    여기서부터 PostMan에서 raw방식으로 쓸 수가 없어진다.

     

    - PostMan

    이제 form-data를 써서 테스트를 해줘야한다.

     

    @RequestPart에 ("key")라고 DTO를 받는 폼 데이터 key를 설정했다면

    DTO는 우리가 어쨌든 JSON으로 계속 받아왔던 것 처럼 value에 json 셋팅을 해서 넣어주면 된다.

    주의할 점은 Content-Type을 application/json으로 넣어줘야 한다.

     

     

    만약 본인이 @RequestPart에 ("data") 이런식으로 했다면 PostMan에서 key대신 data로 넣으면 된다.

     

     

    여기서 조금 변칙적인 문제!

    DTO 안에 List가 있다면 어떻게 Json을 보내야 할까???

    앞서서 썼던 [ ] 를 쓰면 될 것 같긴한데 어느 위치에 써야 할까??

    {"name":"이름",
    "detail":"내용수정",
    "ImgIds":[1,2]
    }
     

    바로 이처럼 ImgIds가 List라고 가정하면 "ImgIds" : [ 넣을 값들 ] 을 해주면 되겠다.

     

     

     

    5. Pageable

    - Controller

    public ResponseEntity<?> testMethod6(Pageable page)
     

    리스트들을 보낼 때 몇 페이지 내용인지 해당 페이지만 담아서 보내주는 Page<?>라는 친구가 있다.

    이거는 간단하다.

     

    - PostMan

    http://localhost:8080/api/v1/items/search?page=0
     

    설정에 따라 다르지만 몇번째 페이지를 보냐를 URL에 담아서 보내게 된다.