Notice
Recent Posts
Recent Comments
«   2024/05   »
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
Archives
Today
Total
관리 메뉴

DeFacto-Standard IT

Object Serialization (JSON) (1) - @RestController, @ResponseBody 본문

SpringFramework/References

Object Serialization (JSON) (1) - @RestController, @ResponseBody

defacto standard 2018. 5. 2. 00:10


1. @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를 사용한다.


Comments