[Spring] JSON 응답과 요청처리

DANI·2023년 12월 28일

[Class] Spring-basic

목록 보기
7/8
post-thumbnail

📕 JSON 응답과 요청이란?

JSON 요청과 응답은 웹 애플리케이션에서 클라이언트와 서버 간에 데이터를 주고받을 때 사용되는 형식 중 하나입니다. JSON(JavaScript Object Notation)은 가독성이 높고 간결한 텍스트 기반의 데이터 교환 형식으로, 클라이언트와 서버 간에 데이터를 구조화하고 전송하기 위해 주로 사용됩니다.



📝 JSON 요청

1. 클라이언트에서 서버로의 요청

POST /api/create HTTP/1.1
Host: example.com
Content-Type: application/json

{
  "name": "John Doe",
  "age": 25,
  "email": "john@example.com"
}
  • http POST, PUT 요청 메서드를 사용
  • 요청 본문에는 JSON 형식으로 데이터를 포함하며, 이 때 헤더에는 Content-Type: application/json이 명시되어야 함

2. 서버에서 JSON 요청

@PostMapping("/api/create")
public ResponseEntity<String> create(@RequestBody User user) {
    // user 객체를 사용하여 작업 수행
    return new ResponseEntity<>("User created successfully", HttpStatus.CREATED);
}
  • 서버는 HTTP 요청을 받은 후, 요청 본문에 포함된 JSON 데이터를 해석하여 자바 객체로 변환한다.
  • Spring MVC에서는 @RequestBody 어노테이션을 사용하여 JSON 요청을 자바 객체로 변환할 수 있다.


📝 JSON 응답

1. 서버에서 클라이언트로의 응답

HTTP/1.1 200 OK
Content-Type: application/json

{
  "status": "success",
  "message": "User retrieved successfully",
  "data": {
    "name": "John Doe",
    "age": 25,
    "email": "john@example.com"
  }
}
  • HTTP 응답의 본문에 JSON 형식으로 데이터를 담아서 전송
  • 응답 헤더에는 Content-Type: application/json이 명시되어야 함

2. 클라이언트에서 JSON 응답

@GetMapping("/api/user/{id}")
@ResponseBody
public User getById(@PathVariable Long id) {
    // id를 사용하여 User 객체를 조회하고 반환
}
  • 클라이언트는 서버의 응답을 받은 후, 응답 본문에 포함된 JSON데이터를 해석하여 필요한 작업을 수행한다.
  • Spring MVC에서는 @ResponseBody 어노테이션을 사용하여 자바 객체를 JSON으로 변환하여 응답할 수 있다.

JSON 요청과 응답을 사용하면 클라이언트와 서버 간의 데이터 교환을 효율적으로 처리할 수 있고 다양한 플랫폼 간에도 호환성이 높아지는 장점이 있다.



  • @RestController : 반환값 객체를 JSON으로 변환
  • @ResponseBody : 컨트롤러의 메서드는 반환값을 템플릿으로 인식하는데, @ResponseBody는 반환값을 템플릿이 아닌 문자열 or 객체로 인식함
  • @JsonIgnore : JSON 객체로 반환할 때 특정 필드 값을 배제시킬 수 있음
  • @JsonFormat(pattern = "yyyy.MM.dd HH:mm") : 날짜를 형식화 시킴


📝 RESTful API 구현 과정

1. 데이터를 담을 클래스 생성

/**
 * 에러를 공통된 제이슨 형식으로 담는 클래스
 * 에러 응답 데이터를 통일성 있게 만들기 위해서
 */
@Data
@RequiredArgsConstructor
@NoArgsConstructor // 기본생성자
public class JSONData<T> {
    // 성공했을때 , 에러가 없을때
    // 보통 성공을 많이 하니까 true를 기본값으로 설정하자!
    private boolean success = true;

    // 스프링에서 지원하는 응답 상태
    // 문자열임
    // 200이 가장 많이 나오므로, 성공시를 기본값으로 설정하자!
    private HttpStatus httpStatus = HttpStatus.OK;

    // 성공시 Body 데이터
    @NonNull
    private T data;

    // 실패시 메세지
    private String message;
}
  • @NoArgsConstructor, @RequiredArgsConstructor : 기본생성자, 필수생성자

2. 컨트롤러 생성

0개의 댓글