1. JSON형태로 화면에 뿌려주기
Restful API를 호출하면 JSON형태로 많이 오더라.
그래서 응답값을 JSON형태로 반환하는 코드를 작성해 보았다.
작성해야 할 부분은 3부분
1. JAVA code : 실질적으로 호출에 대한 처리를 하는 부분
2. web.xml : 환경설정 부분. servlet.xml 파일의 위치, index page 등등 설정
3. *-servlet.xml : MVC의 Controller에 해당하는 부분. Path 설정이나 Java code와 Mapping되는 library를 연결 할 수 있다.
흐름은
1. 사용자가 전달인자를 포함한 요청
2. 해당 요청에 맞는 Controller를 찾고, Method를 호출
3. 메소드의 응답을 반환
여기서 -servlet에서는 요청에 따른 ViewResolver를 분기 할 수 있다.(여기서 View는 GUI의 View가 아니라 화면 그 자체를 의미하는 좀 더 추상적인 개념)
Controller는 요청에 따라 @RequestMapping된 Method들 중 전달인자가 적합한 Method를 골라서 해당 연산을 처리한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | @RequestMapping (value = "/greetings" ) public Greeting getGreeting( @RequestParam (value = "name" , required = false , defaultValue = "world" ) String name, Model model) { // model.addAttribute("greeting", new // Greeting(counter.incrementAndGet(), String.format(template, name))); return new Greeting(counter.incrementAndGet(), String.format(template, name)); // return "greetings"; } @RequestMapping (value = "/greetings/{name}" , method = RequestMethod.GET) public Greeting getGreeting( @PathVariable String name) { return new Greeting(counter.incrementAndGet(), String.format(template, name)); } @RequestMapping (value = "/greetings/{name}/{name2}" , method = RequestMethod.GET) public Greeting getGreeting( @PathVariable String name, @PathVariable String name2) { return new Greeting(counter.incrementAndGet(), String.format(template, name) + "/" + name2); } @RequestMapping (value = "/greetings/{name}/{name2}/{name3}" ) public String getGreeting( @PathVariable String name, @PathVariable String name2, @PathVariable String name3, Model model) { model.addAttribute( "greetings" , new Greeting(counter.incrementAndGet(), String.format(template, name))); return "jsonTemplate" ; } |
메소드를 잘 보면 전달인자에 2가지가 Annotation이 있는데 @PathVariable, @RequestParam이 있다.
@PathVariable : 이 Annotation이 있는 Method에는 RequestMapping의 value에 중괄호로 변수명이 있는것을 볼 수 있다. 호출할때 저 형식으로 호출하면 된다. 예) /greetings/abcd
@RequestParam : GET 방식으로 호출하면 된다. 예) /greetings?name=abcd
또 여기서 중요한 것이 어떤것은 객체(Greeting)를 반환하는것이있고 문자열을 반환하는 것이 있다.
모두들 JSON 형태로 결과를 반환하기 위한 것인데, 둘 다 결과적으로는 Jackson Library를 통해서 변수를 JSON 형태로 반환한다. 두개가 다른점은
1. 객체를 반환 : 나중에 확인 후 기입
2. 문자열을 반환 : 확인 후 기입
ViewResolver
해당 요청이 왔을 때 이것을 jsp문서로 호출할지, 아니면 문자열로 반환할지를 결정하는 부분.
이건 *-servlet.xml에서 우선순위를 줄 수 있다.
1. org.springframework.web.servlet.view.BeanNameViewResolver
- 객체로 반환
1 2 3 4 | <beans:bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver" > <beans:property name= "prefix" value= "/WEB-INF/views/" > <beans:property name= "suffix" value= ".jsp" > </beans:property></beans:property></beans:bean> |
2. org.springframework.web.servlet.view.InternalResourceViewResolver
- jsp 문서로 반환
1 2 3 4 5 | <beans:bean class = "org.springframework.web.servlet.view.BeanNameViewResolver" > <beans:property name= "order" > <beans:value> 0 </beans:value> </beans:property> </beans:bean> |
여기에 bean의 property를 order로 주고 value로 그 우선순위(객체로 반환하는 view인지 jsp 페이지인지)를 결정할 수 있다.
출처 | http://hatti.tistory.com/99
'Java' 카테고리의 다른 글
API -클라이언트/서버 (0) | 2015.10.27 |
---|---|
API Keys (0) | 2015.10.27 |
HTTP Status 405 - Request method 'POST' not supported (0) | 2015.10.27 |
JAVA단에서 ALERT 적용 (0) | 2015.10.26 |
image_map antialiasing (0) | 2015.09.23 |