일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- REST API
- 에라토스테네스의체
- 스택
- SpringBoot
- 쉬운딥러닝
- 책리뷰
- web
- WebMvcTest
- testing
- 그리디
- 로지스틱회귀
- RequestBody
- FNN
- 백준
- 알고리즘
- Backend
- python3
- PS
- responsebody
- 코딩
- DP
- 신경망기초
- withmockuser
- C++
- BOJ
- Spring Data JPA
- 정렬
- Spring
- 딥러닝
- Andrew Ng
- Today
- Total
꾸준히하자아자
[Spring] JSON 이란? (+@RequestBody, @ResponseBody) 본문
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 애노테이션을 사용하지 않아도 됩니다.
'Backend > Spring Boot' 카테고리의 다른 글
stub는 언제 사용할까? (0) | 2023.07.26 |
---|---|
@WebMvcTest 란?, 가짜로 등록한다는 것의 의미? (0) | 2023.07.26 |
MVC패턴을 지키면서 코딩하는방법 (0) | 2023.03.29 |