스프링 3.0 RESTful & restTemplate
-
Upload
isyoon -
Category
Technology
-
view
9.463 -
download
6
description
Transcript of 스프링 3.0 RESTful & restTemplate
![Page 1: 스프링 3.0 RESTful & restTemplate](https://reader034.fdocuments.net/reader034/viewer/2022052311/55889afbd8b42a27268b46e4/html5/thumbnails/1.jpg)
스프링 3.0 & RESTful
백기선 , 김성윤
![Page 2: 스프링 3.0 RESTful & restTemplate](https://reader034.fdocuments.net/reader034/viewer/2022052311/55889afbd8b42a27268b46e4/html5/thumbnails/2.jpg)
봄싹 즐겨찾기 서비스
![Page 3: 스프링 3.0 RESTful & restTemplate](https://reader034.fdocuments.net/reader034/viewer/2022052311/55889afbd8b42a27268b46e4/html5/thumbnails/3.jpg)
To Do
• 링크 등록• 링크 목록 조회• 링크 조회• 링크 수정• 링크 삭제
![Page 4: 스프링 3.0 RESTful & restTemplate](https://reader034.fdocuments.net/reader034/viewer/2022052311/55889afbd8b42a27268b46e4/html5/thumbnails/4.jpg)
즐겨찾기 서비스 URL
작업 URL Method
목록 조회 /link GET
추가 ( 폼 ) /link/form GET
추가 ( 폼 서브밋 ) /link POST
뷰 /link/1 GET
수정 ( 폼 ) /link/1/form GET
수정 ( 폼 서브밋 ) /link/1 PUT
삭제 /link/1 DELETE
![Page 5: 스프링 3.0 RESTful & restTemplate](https://reader034.fdocuments.net/reader034/viewer/2022052311/55889afbd8b42a27268b46e4/html5/thumbnails/5.jpg)
주요 기술 :: 스프링 3.0 @MVC
• @RequestMapping• @PathVariable• hiddenMethodFilter• 스프링 form 태그• ContentsNegotiatingViewResolver
![Page 6: 스프링 3.0 RESTful & restTemplate](https://reader034.fdocuments.net/reader034/viewer/2022052311/55889afbd8b42a27268b46e4/html5/thumbnails/6.jpg)
@RequestMapping
• DefaultAnnotationHandlerMapping 이 @RequestMapping 정보를 참조해서 핸들러 찾아줌 .
@RequestMapping(value = ”/link/{id}", method = RequestMethod.DELETE) public String delete(@PathVariable int id){ postService.delete(id); return ”/link"; }
![Page 7: 스프링 3.0 RESTful & restTemplate](https://reader034.fdocuments.net/reader034/viewer/2022052311/55889afbd8b42a27268b46e4/html5/thumbnails/7.jpg)
@PathVariable
• /link/1 => /link/{id}• 기본값 설정 가능
@RequestMapping(value = "/link/{id}", method = RequestMethod.GET) public String view(@PathVariable int id, Model model){ model.addAttribute(”link", linkService.get(id)); return ”link/view"; }
![Page 8: 스프링 3.0 RESTful & restTemplate](https://reader034.fdocuments.net/reader034/viewer/2022052311/55889afbd8b42a27268b46e4/html5/thumbnails/8.jpg)
hiddenMethodFilter
• 기본값 : _method
<filter><filter-name>httpMethodFilter</filter-name><filter-
class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class></filter>
<filter-mapping><filter-name>httpMethodFilter</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>
![Page 9: 스프링 3.0 RESTful & restTemplate](https://reader034.fdocuments.net/reader034/viewer/2022052311/55889afbd8b42a27268b46e4/html5/thumbnails/9.jpg)
스프링 form 태그
• form 태그 사용하면 PUT, DELETE 사용시 자동으로 히든 파라미터로 값 넘겨줌 .
<form:form commandName=”link" action=”/link/${link.id}" method="PUT">
<form:form action=”/link/${link.id}" method="DELETE">
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
![Page 10: 스프링 3.0 RESTful & restTemplate](https://reader034.fdocuments.net/reader034/viewer/2022052311/55889afbd8b42a27268b46e4/html5/thumbnails/10.jpg)
ContentsNegotiatingViewResolver이게 없다면…
if ("xml".equals(req.getParameter("type"))) { return new ModelAndView(helloMarshallingView, model); } else { return new ModelAndView("/WEB-INF/view/hello.jsp", model); }
![Page 11: 스프링 3.0 RESTful & restTemplate](https://reader034.fdocuments.net/reader034/viewer/2022052311/55889afbd8b42a27268b46e4/html5/thumbnails/11.jpg)
ContentsNegotiatingViewResolver이게 있다면 ?
![Page 12: 스프링 3.0 RESTful & restTemplate](https://reader034.fdocuments.net/reader034/viewer/2022052311/55889afbd8b42a27268b46e4/html5/thumbnails/12.jpg)
ContentsNegotiatingViewResolver동작 방식
1. 미디어 타입 결정
2. 뷰 후보 선정
3. 최종 뷰 결정
![Page 13: 스프링 3.0 RESTful & restTemplate](https://reader034.fdocuments.net/reader034/viewer/2022052311/55889afbd8b42a27268b46e4/html5/thumbnails/13.jpg)
1. 미디어 타입 결정1. URL 확장자로 결정– /book.json
2. 요청 파라미터로 결정– /book?format=json
3. Access 헤더 정보로 결정
4. defaultContentType 속성 값 사용 .
![Page 14: 스프링 3.0 RESTful & restTemplate](https://reader034.fdocuments.net/reader034/viewer/2022052311/55889afbd8b42a27268b46e4/html5/thumbnails/14.jpg)
2. 뷰 후보 선정1. viewResolvers 미사용시 : 서블릿
콘텍스트에 등록된 모든 ViewResolver 사용해서 뷰 후보 선정
2. viewResolvers 사용시 : 모든 뷰 리졸버가 돌려주는 뷰를 후보 목록에 추가
3. defaultView 속성에 설정한 뷰는 무조건 후보 목록에 추가
![Page 15: 스프링 3.0 RESTful & restTemplate](https://reader034.fdocuments.net/reader034/viewer/2022052311/55889afbd8b42a27268b46e4/html5/thumbnails/15.jpg)
3. 최종 뷰 결정• 미디어 타입과 뷰 목록 비교해서 뷰 결정–뷰의 contents-type 과 미디어 타입 비교
• 예제 –미디어 타입은 JSON–뷰 후보 : JSON 뷰 , JSTL 뷰 , XML 뷰–결과 : JSON 뷰 사용
![Page 16: 스프링 3.0 RESTful & restTemplate](https://reader034.fdocuments.net/reader034/viewer/2022052311/55889afbd8b42a27268b46e4/html5/thumbnails/16.jpg)
![Page 17: 스프링 3.0 RESTful & restTemplate](https://reader034.fdocuments.net/reader034/viewer/2022052311/55889afbd8b42a27268b46e4/html5/thumbnails/17.jpg)
RestTemplate
• Spring 3.0 M2 추가됨 .
• Spring’s Template series 와 비슷한 형태
(JdbcTemplate, JmsTemplate ... )
• RESTful 스타일 URL 지원 .
• HTTP access 단순화 .
• 사용자 정의 콜백 및 결과 추출 클래스 지원 .
![Page 18: 스프링 3.0 RESTful & restTemplate](https://reader034.fdocuments.net/reader034/viewer/2022052311/55889afbd8b42a27268b46e4/html5/thumbnails/18.jpg)
RestTemplate Hierarchy
![Page 19: 스프링 3.0 RESTful & restTemplate](https://reader034.fdocuments.net/reader034/viewer/2022052311/55889afbd8b42a27268b46e4/html5/thumbnails/19.jpg)
RestTemplate methods
HTTP method RestTemplate methods
GET getForObject(…)getForEntity(…)
POST postForLocation(…)postForObject(…)
PUT put(…)
DELETE delete(…)
HEAD headForHeaders(…)
OPTIONS optionForAllow(…)
![Page 20: 스프링 3.0 RESTful & restTemplate](https://reader034.fdocuments.net/reader034/viewer/2022052311/55889afbd8b42a27268b46e4/html5/thumbnails/20.jpg)
HttpRequests
SimpleClientHttpRequest(java.net. HttpURLConnection)
CommonsClientHttpRe-quest
(jakarta Commons HttpClient)
Default
사용자 정의 HttpRequest
![Page 21: 스프링 3.0 RESTful & restTemplate](https://reader034.fdocuments.net/reader034/viewer/2022052311/55889afbd8b42a27268b46e4/html5/thumbnails/21.jpg)
HttpMessageConverters
ByteArray •application/octet-stream
String •text/plain
Resource •resource file type
Source •text/xml or application/xml
XmlAwareForm •text/xml or application/xml
Jaxb2RootElement •text/xml or application/xml
MappingJackson •application/json
AtomFeed •application/atom+xml
RssChannel •application/rss+xml
Default
![Page 22: 스프링 3.0 RESTful & restTemplate](https://reader034.fdocuments.net/reader034/viewer/2022052311/55889afbd8b42a27268b46e4/html5/thumbnails/22.jpg)
RestTemplate – 사용전String uri = "http://example.com/hotels/1/bookings";
PostMethod post = new PostMethod(uri);
String request = // create booking request content
post.setRequestEntity(new StringRequestEntity(request));
httpClient.executeMethod(post);
if (HttpStatus.SC_CREATED == post.getStatusCode()) {
Header location = post.getRequestHeader("Location");
if (location != null) {
System.out.println(location.getValue());
}
}
![Page 23: 스프링 3.0 RESTful & restTemplate](https://reader034.fdocuments.net/reader034/viewer/2022052311/55889afbd8b42a27268b46e4/html5/thumbnails/23.jpg)
RestTemplate – 사용후
String uri = "http://example.com/hotels/{id}/bookings";
RestOperations restTemplate = new RestTemplate();
Booking booking = // create booking object
URI location = restTemplate.postForLocation(uri, booking, “1”);
System.out.println(location);
![Page 24: 스프링 3.0 RESTful & restTemplate](https://reader034.fdocuments.net/reader034/viewer/2022052311/55889afbd8b42a27268b46e4/html5/thumbnails/24.jpg)
Authentication
Basic Authentication
• CommonsClientHttpRequest
Open Authorization(OAuth)
• 미지원 (3.1M1 Fix 예정 )
![Page 25: 스프링 3.0 RESTful & restTemplate](https://reader034.fdocuments.net/reader034/viewer/2022052311/55889afbd8b42a27268b46e4/html5/thumbnails/25.jpg)
RestTemplate @ Twitter RESTful