브라우저가 아닌 기타 환경에서의 request를 처리하기 위해 만들어졌다.
웹의 request는 서버가 request에 맞는 business Logic을 처리한 뒤 html에 데이터를 넣어 client에게 반환한다.
그 후 browser가 해당 html을 랜더링하여 end user에게 보여준다. 이는 server가 browser에게 UI를 제공해주는것과 같다.
반면 APP은 다운로드 과정을 통해 이미 UI는 구성되어있고 동적인 UI를 구성하기 위한 Data만이 필요하다.
따라서 웹 서버는 기존의 html을 반환하는것이 아닌 data를 반환해야하는 상황이 생겼고 이러한 data를 반환하기 위한 data format이 JSON이다.
JSON은 단순히 데이터를 표현하기 위한 표현 방식이며 JavaScript의 Object, Array 표기법을 따라 만든 data format이다.
사용자가 매번 직접 JSON을 만들고 JSON을 parsing하는 일은 매우 번거로운 작업이다.
jackson lib을 이용해 위 작업을 간편하게 할 수 있다.
//VO ==> JSON
UserHasASearch userHasASearch = new UserHasASearch("user01", "홍길동", "1111", null, 10);
Search search = new Search();
search.setSearchCondition("이름검색");
userHasASearch.setSearch(search);
ObjectMapper objectMapper = new ObjectMapper();
String jsonValue = objectMapper.writeValueAsString(userHasASearch);
//JSON ==> VO
UserHasASearch returnUserHasASearch = objectMapper.readValue(jsonValue, UserHasASearch.class);
System.out.println(returnUserHasASearch);
//JSON ==> JSONObject
JSONObject jsonObject = (JSONObject)JSONValue.parse(jsonValue);
System.out.println(jsonObject);
Spring에서는 @Controller를 통해 path와 data가 담긴 ModelAndView을 반환하거나 data를 담은 model과 return 타입으로 view의 경로를 String으로 반환하면
viewResolver가 해당 정보들을 통해 client에게 html을 전달해주었다.
html이 아닌 JOSN과 같은 data만을 전달하고 싶을때 spring에서 지원해주는 기능이 @RestController다.
반환한 object를 JSON으로 만들어 client에 전달해준다.
@RestController
@RequestMapping("/user")
public class UserRestController {
public UserRestController() {
System.out.println("init UserRestController");
}
@GetMapping(value = "/json/{value}")
public Map getUser(@PathVariable String value, @RequestParam String name, @RequestParam int age) throws Exception {
User user = new User();
user.setUserId("AAA");
user.setUserName("BBB");
user.setAge(100);
System.out.println(user);
Map map = new HashMap<>();
map.put("user", user);
map.put("message", "ok");
return map;
}
}