개발새발/Spring

220211_스프링입문_스프링 부트 시작하기_GET API(2)_패스트캠퍼스 챌린지 19일차

막동이아빠 2022. 2. 11. 16:59

220211_스프링입문_스프링 부트 시작하기_GET API(2)_패스트캠퍼스 챌린지 19일차

<2022년 02월 11일 _ 패스트캠퍼스 챌린지 19일차>

[스프링입문_스프링 부트 시작하기_GET API(2)]

https://mylife4hi.red/47

 

220210_스프링입문_스프링 부트 시작하기_GET API(1)_패스트캠퍼스 챌린지 18일차

220210_스프링입문_스프링 부트 시작하기_GET API(1)_패스트캠퍼스 챌린지 18일차 [스프링입문_스프링 부트 시작하기_GET API(1)] 1. 메소드의 특성 의미 CRUD 멱등성 안정성 Path Variable Query Parameter DataB..

mylife4hi.red

지난 내용에 이어서 강의 이어집니다.

1. 메소드의 특성

  의미 CRUD 멱등성 안정성 Path Variable Query
Parameter
DataBody
GET 리소스 취득 R O O O O X
POST 리소스 생성,추가 C X X O O
PUT 리소스 갱신, 생성 C / U O X O O
DELETE 리소스 삭제 D O X O O X
HEAD 헤더 데이터 취득 - O O - - -
OPTIONS 지원하는 메소드 취득 - O - - - -
TRACE 요청메시지 반환 - O - - - -
CONNECT 프록시 동작의 터널 접속으로 변경 - X - - - -

2. 실습

 (7) Query Parameter 받아보기

   : GetApiController 클래스에 작성

package com.example.hello.controller;

import org.springframework.web.bind.annotation.*;

import java.util.Map;

@RestController
@RequestMapping("/api/get")
public class GetApiController {
    //Query Parameter 받아보기
    // search?q=intelliJ
    // &sxsrf = APq-WBsyC-rn9J42ST20OGzQk576qESbsQ%3A1644556075601
    // &ei = K-8FYtmgJNml2roPmMmi6AY
    // &ved = 0ahUKEwiZ4svl8Pb1AhXZklYBHZikCG0Q4dUDCA4
    // &uact = 5
    // &oq = intelliJ
    // &gs_lcp = Cgdnd3Mtd2l6EAMyBAgjECcyBQgAEIAEMgUIABCABDIFCAAQgAQyBQgAEIAEMgUIABCABDIFCAAQgAQyBQgAEIAEMgQIABBDMgcIABCxAxBDOggIABCABBCxAzoLCAAQgAQQsQMQgwE6DgguEIAEELEDEMcBENEDSgQIQRgASgQIRhgAUABY2A9guxFoAHABeACAAY8BiAHICJIBAzAuOJgBAKABAcABAQ&sclient=gws-wiz
    // 시작은 ?로 시작해서 Key = value 방식
    // ?key=value&key2=value2...
    // http://localhost:9090/api/get/query-param?user=steve&steve@gmail.com&age=30
    @GetMapping(path = "query-param")
    public String queryParam(@RequestParam Map<String, String> queryParam){

        StringBuilder sb = new StringBuilder();

        queryParam.entrySet().forEach( entry -> {
            System.out.println(entry.getKey());
            System.out.println(entry.getValue());
            System.out.println("\n");

            sb.append(entry.getKey() + " = " + entry.getValue() + "\n");
        });

        return sb.toString();
    }
}

 (8) 서버를 다시 실행하고, Talend API로 테스트한다

http://localhost:9090/api/get/query-param?name=작막이&email=steve@gmail.com&age=31

queryParam = {LinkedHashMap@6095}  size = 3
 "name" -> "작막이"
  key = "name"
  value = "작막이"
 "email" -> "steve@gmail.com"
  key = "email"
  value = "steve@gmail.com"
 "age" -> "31"
  key = "age"
  value = "31"

 

디버깅을 해보면 값이 잘 들어간 것을 확인 할 수 있다

 

 (9) 명확하게 key를 지정해주는 queryParam을 작성해보자

package com.example.hello.controller;

import org.springframework.web.bind.annotation.*;

import javax.websocket.server.PathParam;
import java.util.Map;

@RestController
@RequestMapping("/api/get")
public class GetApiController {
    //Query Parameter 받아보기
    // search?q=intelliJ
    // &sxsrf = APq-WBsyC-rn9J42ST20OGzQk576qESbsQ%3A1644556075601
    // &ei = K-8FYtmgJNml2roPmMmi6AY
    // &ved = 0ahUKEwiZ4svl8Pb1AhXZklYBHZikCG0Q4dUDCA4
    // &uact = 5
    // &oq = intelliJ
    // &gs_lcp = Cgdnd3Mtd2l6EAMyBAgjECcyBQgAEIAEMgUIABCABDIFCAAQgAQyBQgAEIAEMgUIABCABDIFCAAQgAQyBQgAEIAEMgQIABBDMgcIABCxAxBDOggIABCABBCxAzoLCAAQgAQQsQMQgwE6DgguEIAEELEDEMcBENEDSgQIQRgASgQIRhgAUABY2A9guxFoAHABeACAAY8BiAHICJIBAzAuOJgBAKABAcABAQ&sclient=gws-wiz
    // 시작은 ?로 시작해서 Key = value 방식
    // ?key=value&key2=value2...
    // http://localhost:9090/api/get/query-param?user=steve&steve@gmail.com&age=30
    @GetMapping(path = "query-param")
    public String queryParam(@RequestParam Map<String, String> queryParam){

        StringBuilder sb = new StringBuilder();

        queryParam.entrySet().forEach( entry -> {
            System.out.println(entry.getKey());
            System.out.println(entry.getValue());
            System.out.println("\n");

            sb.append(entry.getKey() + " = " + entry.getValue() + "\n");
        });

        return sb.toString();
    }

    //Map으로 받을땐 뭐가 들어올 지 모르기 때문에, 명시적으로 표현해 주는 것이 좋다
    @GetMapping("query-param02")
    public String queryParam02(
            @RequestParam String name,
            @RequestParam String email,
            @RequestParam int age
    ){

        System.out.println(name);
        System.out.println(email);
        System.out.println(age);
        return name + " " + email + " " + age;
    }
}

 (10) 서버를 다시 실행하고, Talend API로 테스트한다

http://localhost:9090/api/get/query-param?name=작막이&email=steve@gmail.com&age=31

(11) 숫자가 들어갈 곳에 문자가 들어가면 에러가 나게 된다

http://localhost:9090/api/get/query-param?name=작막이&email=steve@gmail.com&age=abcd

 

 (12) 명확하게 키를 지정해주면서도, 매번 일일히 코드에 추가를 해주지 않아도 되는 dto방식으로 적용해보자

 : dto 패키지 추가 & dto 패키지에 UserRequest 클래스 추가

package com.example.hello.dto;

public class UserRequest {

    private String name;
    private String email;
    private int age;
}

 : 메뉴 상단의 Code > Generate > Getters and Setters 클릭

 : 세가지를 모두 선택 후 OK 클릭

package com.example.hello.dto;

public class UserRequest {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    private String email;
    private int age;
}

 

(13) 파라미터로 dto클래스를 바로 적용하자! query-param03

package com.example.hello.controller;

import com.example.hello.dto.UserRequest;
import org.apache.catalina.User;
import org.springframework.web.bind.annotation.*;

import javax.websocket.server.PathParam;
import java.util.Map;

@RestController
@RequestMapping("/api/get")
public class GetApiController {
    @GetMapping(path = "query-param")
    public String queryParam(@RequestParam Map<String, String> queryParam){

        StringBuilder sb = new StringBuilder();

        queryParam.entrySet().forEach( entry -> {
            System.out.println(entry.getKey());
            System.out.println(entry.getValue());
            System.out.println("\n");

            sb.append(entry.getKey() + " = " + entry.getValue() + "\n");
        });

        return sb.toString();
    }

    //Map으로 받을땐 뭐가 들어올 지 모르기 때문에, 명시적으로 표현해 주는 것이 좋다
    @GetMapping("query-param02")
    public String queryParam02(
            @RequestParam String name,
            @RequestParam String email,
            @RequestParam int age
    ){

        System.out.println(name);
        System.out.println(email);
        System.out.println(age);
        return name + " " + email + " " + age;
    }

    @GetMapping("query-param03")
    //dto 방식 파라미터에선 @RequestParam 어노테이션을 붙이지 않는다
    // 쿼리 String으로 들어오는 내용을 해당 UserRequest 객체에서 변수와 이름 매칭을 해준다
    public String queryParam03(UserRequest userRequest){

        System.out.println(userRequest.getName());
        System.out.println(userRequest.getEmail());
        System.out.println(userRequest.getAge());
        return userRequest.toString();
    }
}

※주의사항※

※dto 방식 파라미터에선 @RequestParam 어노테이션을 붙이지 않는다!! ※

붙일 경우 다음과 같은 오류 발생

package com.example.hello.dto;

public class UserRequest {

    private String name;
    private String email;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    //자동으로 어떤 키밸류가 있는지 보여주도록
    @Override
    public String toString() {
        return "UserRequest{" +
                "name='" + name + '\'' +
                ", email='" + email + '\'' +
                ", age=" + age +
                '}';
    }
}

 (14) 서버를 다시 실행하고, Talend API로 테스트한다

http://localhost:9090/api/get/query-param?name=작막이&email=steve@gmail.com&age=31

 

UserRequest{name='작막이', email='steve@gmail.com', age=31}

위와 같은 결과로 리턴된다

 

19일차 강의 완료~

필기 & 내 화면 스크린샷 저장

 

 

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.