일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- hash table
- 자바입력
- 사칙연산
- Kadane's Algorithm
- 수학
- Easy
- R
- input
- 자바 스레드 실행 순서 제어
- 자바 thread 실행 순서 제어
- heroku
- array
- JAVA11
- 카데인 알고리즘
- SpringBoot 2
- scanner
- Today
- Total
DeFacto-Standard IT
Object Serialization (JSON) (1) - @RestController, @ResponseBody 본문
Object Serialization (JSON) (1) - @RestController, @ResponseBody
defacto standard 2018. 5. 2. 00:101. @ResponseBody
Client에서@RestController Annotation이 붙은 Controller Class에 Ajax Call을 하는 경우이다.
@RestController에 포함된 Annotation인 @ResponseBody를 사용하여, HTTP Body에 Object가 JSON 포맷으로 들어간다.
@RestController는 Class단에서 매핑한다. 즉, 해당 Annotation이 붙은 모든 메서드는 @ResponseBody Annotation이 붙은 효과를 볼 수 있다.
Client는 JavaScript의 Framework인 JQuery의 $.ajax() 등을 통해 Response의 Content-Type을 application/JSON으로 명시할 경우,
success(data) 함수에서 data인자쪽에 JavaScript Object로 바로 삽입된다.
* php와 같은 언어는 Controller단에서 echo 명령을 통해 Restful API를 구현하기도 한다.
복잡하지 않거나, 깊이가 1인 JSON Object를 생성할 때(List 포함하여) 쓰기 좋다. 또한, Restful API를 구현할 때 @RestController는 반드시 기억하도록 하자.
중간에 JSON 객체를 생성하는 과정이 없으며, 원하는 Java Object를 생성하여 HTTP 객체에 넣고 리턴하기만 하면 Client에서는 Response에 내용이 다 JSON 포맷으로 들어가기에 사용하기 굉장히 간편하다.
Return Type은 ResponseEntity Class를 활용한다.
- Controller
// @RestController의 @ResponseBody기능에 의해 Method가 Return하는 내용들이 Response의
// Body부분에 JSON Format으로 들어간다.
@RestController
@RequestMapping("/rest/cart")
public class CartRestController {
@Autowired
private CartService cartService;
// cartId를 바탕으로 Cart정보를 검색
@RequestMapping(value = "/{cartId}", method = RequestMethod.GET)
public ResponseEntity<Cart> getCartById(@PathVariable(value = "cartId") int cartId) {
Cart cart = cartService.getCartById(cartId);
// Response Body에 cart, HttpStatus를 담은 후 이것을 ResponseBody에 담아서 보낸다.
return new ResponseEntity<Cart>(cart, HttpStatus.OK);
}
}
위 예제의 경우, CartService 객체를 사용하여 Cart 객체를 DB로부터 얻어온다.
그 후에 ResponseEntity 객체를 만들고, Body부분에 Cart 타입 오브젝트가 들어갈 것을 명시한 후, 첫 번째 인자로는 Cart객체를, 두 번째 인자로는 HTTP Status Code를 기술한다. HttpStatus.OK 같은 경우 '200'을 의미한다.
2. @ResponseBody
Class단에서 매핑하는 @RestController와 달리, @ResponseBody는 Method 단에서 매핑한다.
같은 Controller Class에 있어도, 특정 메서드만 Restful API로 작성할 수 있다.
Return Type은 @RestController와 동일하게 ResponseEntity를 사용한다.
'SpringFramework > References' 카테고리의 다른 글
Object Serialization (JSON) (3) - net.sf.json (0) | 2018.05.03 |
---|---|
Object Serialization (JSON) (2) - jackson-databind# ObjectMapper Class (0) | 2018.05.03 |
Spring DataBinding (3) - AJAX Request via JQuery (JSON) (2) | 2018.05.02 |
Spring DataBinding (2) - Spring Form Tag (0) | 2018.05.02 |
Spring DataBinding (1) - HTML Form (0) | 2018.02.10 |