[Spring] JSON 이란? (+@RequestBody, @ResponseBody)

2023. 6. 23. 23:58·Web/Spring
728x90
728x90

JSON

(JavaScript Object Notation)

  • 자바스크립트에서 객체를 표현하는 방법이지만 다양한 프로그래밍 언어에서 데이터를 주고 받기 위해 사용된다.
  • Spring에서는 주로 응답으로 XML이나 JSON형식을 사용한다.

이러한 형식의 코드를 예로 들 수 있다.

이 코드는 Request Body(요청 본문)에 담기는 값이다.

(회원가입을 할 때 사용할 수 있다.) - POST 방식

{
	"username":"mata",
	"email":"meta@nate.com",
	"password":"meta1234!"
}

 

이 코드는 Response Body(응답본문) 에 담기는 값이다.

{
	"success": true,
	"response": [
 		{
			"id": 1,
			"productName": "기본에 슬라이딩 지퍼백 크리스마스/플라워에디션 에디션외 주방용품 특가전",
			"description": "",
			"image": "/images/1.jpg",
			"price": 1000
 		},
 		{
			"id": 2,
			"productName": "[황금약단밤 골드]2022년산 햇밤 칼집밤700g외/군밤용/생율",
			"description": "",
			"image": "/images/2.jpg",
			"price": 2000
 		}
	 ]
}

 

{ } (중괄호) 를 통해 하나의 객체를 표현하며,

[] (대괄호) 는 배열을 뜻하고

내부에는 Key : Value 값들로 각 속성값을 정의하고 있으며,

Key 와 Value 는 : (콜론) 에 의해 구분되고

각각의 속성은 , (쉼표) 로 구분되어 진다.

 

그렇다면 간단한 코드를 예로 들어 Controller에서 JSON데이터를 주고 받아보자.

Controller에서 데이터를 받는 방법에는 여러가지가 있다.

그 중 파라미터를 객체로 받는 방법에는 @RequestBody 어노테이션을 사용하면 된다.

이후 JAVA Object를 JSON 데이터로 응답해주는 @ResponseBody를 사용해 응답을 해준다.

 

@PostMapping("/request")
public ResponseEntity postController(@RequestBody LoginForm loginForm) {
		exampleService.fakeAuthenticate(loginForm);
    return ResponseEntity.ok(HttpStatus.OK);
}

이 코드에서 @RequestBody를 통해 요청 본문에 담긴 JSON 데이터가 자동으로 LoginForm 객체로 변환된다.

@RequestParam
은 주로 GET 요청의 쿼리 매개변수를 추출할 때 사용됩니다.
@RequestBody
는 POST, PUT, PATCH 등의 요청 메서드에서 요청 본문에 포함된 데이터를 처리할 때 주로 사용됩니다.

 

이번엔 Controller에서 데이터를 반환해보자.

커스텀 된 Response object가 있다고 가정하자.

public class ResponseTransfer {
    private String text; 
    
    // standard getters/setters
}
@Controller
@RequestMapping("/post")
public class ExamplePostController {

    @Autowired
    ExampleService exampleService;

    @PostMapping("/response")
    @ResponseBody
    public ResponseTransfer postResponseController(@RequestBody LoginForm loginForm) {
        return new ResponseTransfer("Thanks For Posting!!!");
     }
}

여기서 @ResponseBody는 postResponseController 메서드가 반환하는 값이 응답 본문으로 전송되어야 함을 뜻한다.

 

postman와 같은 콘솔을 이용해서 확인해보면

{"text":"Thanks For Posting!!!"}

이러한 응답이 나오게 된다.

 

추가

Remember, we don't need to annotate the @RestController-annotated controllers with the @ResponseBody annotation since Spring does it by default.

@RestController 는 컨트롤러 클래스에 이 애노테이션을 추가하면 해당 클래스의 모든 핸들러 메서드가 기본적으로 @ResponseBody 동작을 갖게 됩니다.

메서드의 반환 값이 HTTP 응답의 본문으로 전송됩니다. 따라서 별도의 @ResponseBody 애노테이션을 사용하지 않아도 됩니다.

728x90
728x90

'Web > Spring' 카테고리의 다른 글

[Spring] stub는 언제 사용할까?  (2) 2023.07.26
[Spring] @WebMvcTest 란?, 가짜로 등록한다는 것의 의미?  (1) 2023.07.26
MVC패턴을 지키면서 코딩하는방법  (1) 2023.03.29
'Web/Spring' 카테고리의 다른 글
  • [Spring] stub는 언제 사용할까?
  • [Spring] @WebMvcTest 란?, 가짜로 등록한다는 것의 의미?
  • MVC패턴을 지키면서 코딩하는방법
성장하고픈개발자
성장하고픈개발자
방학 기념 개발블로그 작성하기
    반응형
  • 성장하고픈개발자
    꾸준히하자아자
    성장하고픈개발자
  • 전체
    오늘
    어제
    • 분류 전체보기 (68)
      • 독일 (1)
      • Algorithm (45)
        • 백준 & 프로그래머스 (40)
        • 알고리즘 (5)
      • 프로젝트 (5)
        • 카카오 쇼핑하기 web (4)
        • 요약쏙 (0)
      • Web (6)
        • 네트워크 (1)
        • Spring (4)
        • JPA (0)
        • HTTP (1)
      • 후기 (3)
      • SSAFY 일상 (6)
      • 취준 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 깃허브
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    Spring
    싸피 13기
    SpringBoot
    비자
    web
    알고리즘
    코딩
    BOJ
    백준
    C++
    PS
    스택
    백엔드
    책리뷰
    정렬
    그리디
    LIS
    Spring Data JPA
    회고
    싸피
    Andrew Ng
    네이버데이터센터각
    일상
    DP
    딥러닝
    SSAFY
    쉬운딥러닝
    FNN
    testing
    합격수기
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.1
성장하고픈개발자
[Spring] JSON 이란? (+@RequestBody, @ResponseBody)
상단으로

티스토리툴바