
사용환경
- Intelli J - Java
- postman


json에서 다룰 수 있는 데이터의 형태
=> key : value 형태
- String: 문자
- Number: 소수점 포함한 숫자(int, double, float과 같은 데이터타입을 구분하지 않음)
- Boolean: true/false
- []: array (배열에 담긴 타입은 동일해야함, array안에 object가 들어갈 수 있음)
- {}: obiect
json을 표현하는 방식
package org.example.restapi.controller;
import org.example.restapi.controller.model.BookQueryParam;
import org.springframework.web.bind.annotation.*;
//클라이언트가 서버에 요청을 하기 위해서는 진입점의 주소를 작성해주어야 함: controller
@RestController
@RequestMapping("/api") // 받을 주소 지정 즉, api로 시작되는 주소는 아래 controller로 요청을 받음
public class RestApiController {
//http://localhost:8080/api/hello
@GetMapping(path= "/hello")
public String hello() {
return "hello spring boot";
}
//http://localhost:8080/api/출력하고자 하는 메세지 입력
@GetMapping(path = "/echo/{message}")
//public String echo(@PathVariable(name = "message") String msg // path 변수 이름과 같지 않은 경우 name으로 매칭시킬 이름을 지정해주면 됨
public String echo(@PathVariable String message){
System.out.println("echo message :"+message);
return message;
}
//http://localhost:8080/api/book?category=IT&issuedYear=2023&issued-month=01&issued_day=31
@GetMapping(path = "/book")
public void queryParam(
@RequestParam String category,
@RequestParam String issuedYear,
@RequestParam(name = "issued-month") String issuedMonth,
@RequestParam(name = "issued_day") String issuedDay
){
System.out.println(category);
System.out.println(issuedYear);
System.out.println(issuedMonth);
System.out.println(issuedDay);
}
//http://localhost:8080/api/book2?category=IT&issuedYear=2023&issuedMonth=01&issuedDay=31
@GetMapping(path = "/book2")
public void queryParamDto(
BookQueryParam bookQueryParam
){
System.out.println(bookQueryParam);
}
}
[BookQueryParam]
package org.example.restapi.controller.model;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data //lombok -> 기본 생성자와 getter, setter 자동 생성됨
@AllArgsConstructor //전체 파라미터를 가진 생성자 (대신 기본 생성자가 삭제됨)
@NoArgsConstructor //기본 생성자 생성
public class BookQueryParam {
private String category;
private String issuedYear;
private String issuedMonth;
private String issuedDay;
}
{
"key1" : "value1",
"key2" : "value2",
"key3" : "value3",
}
[PostApiController]
package org.example.restapi.controller;
import org.example.restapi.model.BookRequest;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api")
public class PostApiController {
// http://localhost:8080/api/post
@PostMapping("/post") //post 방식은 default가 객체로 받아야함
public BookRequest post(
@RequestBody BookRequest bookRequest
//@RequestBody는 POST, PUT 방식에서 HTTP BODY로 들어오는 데이터를 해당 객체에 매핑을 해줌을 의미함
) {
System.out.println(bookRequest);
return bookRequest; // postman의 Body에서 서버의 응답을 확인 할 수 있음, return 하는 타입에 따라 content-type이 바뀜
}
}
[BookRequest]
package org.example.restapi.model;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BookRequest {
private String name;
private String number;
private String category;
}
[postman]

[PutApiController]
package org.example.restapi.controller;
import lombok.extern.slf4j.Slf4j;
import org.example.restapi.model.UserRequest;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j // log back
@RestController
@RequestMapping("/api")
public class PutApiController {
@PutMapping("/put")
public void put(
@RequestBody UserRequest userRequest
){
log.info("Request: {}", userRequest); // 중괄호는 뒤에 있는 객체(userRequest)가 매핑이 되며, tostring()이 호출이 됨
}
}
[UserRequest]
package org.example.restapi.model;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
public class UserRequest {
private String name;
private int age;
private String email;
private Boolean isKorean;
//private boolean isKorean; //is_korean
//private 타입의 boolean은 default 값이 false임
//is 시리즈는 boolean형을 뜻하기 때문에, set method가 setIsKorean이 아닌 setKorean으로 생성됨
//해결방법: 대문자로 시작하는 Boolean 사용
}
package org.example.restapi.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
@Slf4j
@RestController //클라이언트가 서버에 요청을 하기 위해서는 진입점의 주소를 작성해주어야 함: controller
@RequestMapping("/api") // 받을 주소 지정 즉, api로 시작되는 주소는 아래 controller로 요청을 받음
public class RestApiController {
@DeleteMapping(path = {"/user/{name}/delete","/user/{name}/del"})
// ("/delete")와 (path = {"/delete","/del"}) 둘다 가능 -> 후자는 경로를 여러개 넣을 수 있음
public void delete(
@PathVariable String name
){
log.info("user-name: {}", name );
}
}