본문 바로가기

Java

[Spring] Restful API

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