반응형

이번에는 Spring Boot 를 사용해 Parameter를 전달 받는 방법과 Get/Post 방식, 그리고 범용으로 쓸 수 있는 응답 클래스를 제작하는 것을 해보겠습니다.


1. Parameter 전달 받기

이전에 만든 HelloController.java 클래스에 아래와 같이 추가합니다.

@GetMapping("args")
public Hello getArgs(
@RequestParam(value = "msg")String msg,
@RequestParam(value = "msg2")String msg2) {
Hello hello = new Hello(0, msg);
hello.setMsg(hello.getMsg() + ", " + msg2);

return hello;
}

 - 요청URL

http://localhost:8080/hello/args?msg=m1&msg2=m2

 - 응답


{

  "code": 0,

  "msg": "m1, m2"

}

 



2. 선택적으로 Parameter 전달 받기

Parameter값 중에 필수값이 아닌것을 설정합니다. 그리고 전달이 없을때의 기본값도 설정 할 수 있습니다.

@GetMapping("argsDefault")
public Hello getArgsDefault(
@RequestParam(value = "msg")String msg,
@RequestParam(value = "msg2", required = false, defaultValue = "msg2Default")String msg2) {
Hello hello = new Hello(0, msg);
hello.setMsg(hello.getMsg() + ", " + msg2);

return hello;
}

- 요청URL

http://localhost:8080/hello/argsDefault?msg=m1

 - 응답

{

  "code": 0,

  "msg": "m1, msg2Default"


3. Post 전송

Post 전송은 웹브라우져에서 테스트할 수 없습니다. 

크롭 웹 스토어에서 "Postman" 검색 후 설치하신 후 사용하시면 됩니다.

(링크 : https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop)


우선 Spring Boot에서 아래와 같이 추가합니다.

@PostMapping()
public Hello post(@RequestBody Param param) {
String msg = "Data1 : " + param.getData1() + ", Data2 : " + param.getData2();
Hello hello = new Hello(0, msg);
return hello;
}


그리고 domain패키지 내에 Param클래스를 추가합니다.

package com.sample.springboot.domain;

public class Param {
private int data1;
private String data2;

public int getData1() {
return data1;
}

public void setData1(int data1) {
this.data1 = data1;
}

public String getData2() {
return data2;
}

public void setData2(String data2) {
this.data2 = data2;
}
}


Post의 경우는 Http의 Body 부분에 정의된 클래스 형식으로 데이터를 통째로 전달 받는 방식을 많이 사용합니다.

물론 Get방식과 같이 @RequestParam형태로도 전달은 가능합니다.


아래는 Postman을 통해서 요청하는 부분입니다.


빨간 줄로 표시 한 부분을 잘 보시고 같이 세팅 하시고 테스트 하시면 됩니다.

POST전송, Body부분에 JSON raw타입 으로 전송을 한다고 보시면 됩니다.


위에서 제작한 Param클래스를 클라이언트(안드로이드, 아이폰 등)와 서버에 같이 만들어 두고 데이터 송수신 용으로 쓰면 아주 편리하니 참고하시구요.

Postman은 아주 유용한 프로그램이니 꼭 설치하시고 사용하시길 추천드립니다.


4. Put전송

REST에서는 보통 4가지 통신방식을 주로 사용하는데요. 

Get은 조회, Post는 수정, Put은 추가, Delete는 삭제라고 보시면 됩니다. 이게 표준이긴 한데 개발하다 보면 딱 이게 조회다, 수정이다 라고 한정되는 경우는 많지 않은 것 같아요.

예를 들면 수정을 한 후 조회결과를 내려준다 든지 하는 복합적인 경우가 많거든요.

그래서 Post로 모든 방식을 통일해서 사용하는 경우도 많은 것 같구요. 개인적으로도 한 방식으로 통일하는게 오히려 더 직관적이고 개발하기 좋았던 것 같습니다.

그래도 어떤 항목 들이 있는지 정도는 알고 있어야 하지 않을 까 합니다.


Put으로 전달받기

@PutMapping()
public Hello put(@RequestParam(value = "param1")String param1) {
Hello hello = new Hello(0, "Put Request : " + param1);
return hello;
} 



5. 응답 공통 클래스 만들기

보통 REST 응답에서 공통으로 들어가는게 응답코드, 응답메세지, 데이터 이렇게 세가지가 있는데요.

이걸 공통 클래스로 제작해서 편하게 사용하는 부분입니다.


우선 응답 클래스 입니다. 저는 response패키지 밑에 만들었어요.
응답 클래스 생성 시 Getter는 꼭 있어야 정상 동작하니 꼭 참조하세요.

package com.sample.springboot.response;

public class JSONResponse<T> {
private int code;
private String msg;
private T data;

public JSONResponse() {
}

public JSONResponse(int code, String msg, T data) {
this.code = code;
this.msg = msg;
this.data = data;
}

public int getCode() {
return code;
}

public void setCode(int code) {
this.code = code;
}

public String getMsg() {
return msg;
}

public void setMsg(String msg) {
this.msg = msg;
}

public T getData() {
return data;
}

public void setData(T data) {
this.data = data;
}
}


Get으로 받는 부분입니다.

@GetMapping("jsonResponse")
public JSONResponse<Hello> getJsonResponse(
@RequestParam(value = "msg")String msg) {
Hello hello = new Hello(0, msg);

JSONResponse<Hello> response = new JSONResponse<Hello>();
response.setCode(1);
response.setMsg("응답코드가 1이네요.");
response.setData(hello);

return response;
}


테스트 결과


JSONResponse 의 Data(T Class)에는 클래스, 리스트, 맵 모든 형식이 가능하니 참고하세요.



현재까지 진행한 프로젝트의 전체 모습입니다.


그리고 HelloController.java 전체 소스입니다.

package com.sample.springboot.controller;

import com.sample.springboot.domain.Hello;
import com.sample.springboot.domain.Param;
import com.sample.springboot.response.JSONResponse;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping(value = "hello")
public class HelloController {
@GetMapping()
public Hello get() {
return new Hello(0, "Hello Spring Boot!");
}

@GetMapping("args")
public Hello getArgs(
@RequestParam(value = "msg")String msg,
@RequestParam(value = "msg2")String msg2) {
Hello hello = new Hello(0, msg);
hello.setMsg(hello.getMsg() + ", " + msg2);

return hello;
}

@GetMapping("argsDefault")
public Hello getArgsDefault(
@RequestParam(value = "msg")String msg,
@RequestParam(value = "msg2", required = false, defaultValue = "msg2Default")String msg2) {
Hello hello = new Hello(0, msg);
hello.setMsg(hello.getMsg() + ", " + msg2);

return hello;
}

@PostMapping()
public Hello post(@RequestBody Param param) {
String msg = "Data1 : " + param.getData1() + ", Data2 : " + param.getData2();
Hello hello = new Hello(0, msg);
return hello;
}

@PutMapping()
public Hello put(@RequestParam(value = "param1")String param1) {
Hello hello = new Hello(0, "Put Request : " + param1);
return hello;
}

@GetMapping("jsonResponse")
public JSONResponse<Hello> getJsonResponse(
@RequestParam(value = "msg")String msg) {
Hello hello = new Hello(0, msg);

JSONResponse<Hello> response = new JSONResponse<Hello>();
response.setCode(0);
response.setMsg("성공");
response.setData(hello);

return response;
}
}



이 정도만 하면 RESTFul의 기본적인 형태는 갖추어진 것 같네요.

앞으로 더 필요한 걸 보자면 크게는 DB연결, 인증토큰발행(JWT사용) 등이 있는 것 같네요.

이 부분은 정리되는 데로 포스팅 하도록 하겠습니다.

반응형

' > WAS(Spring)' 카테고리의 다른 글

Spring Boot로 5분만에 WAS 서버(RESTFul) 만들기  (1) 2017.11.06
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기