스프링3.0 & RESTful<br />백기선, 김성윤<br />
봄싹 즐겨찾기 서비스<br />
To Do<br />링크 등록<br />링크 목록 조회<br />링크 조회<br />링크 수정<br />링크 삭제<br />
즐겨찾기 서비스 URL<br />
주요 기술 :: 스프링 3.0 @MVC<br />@RequestMapping<br />@PathVariable<br />hiddenMethodFilter<br />스프링 form 태그<br />ContentsNegoti...
@RequestMapping<br />@RequestMapping(value = ”/link/{id}", method = RequestMethod.DELETE)<br />    public String delete(@P...
@PathVariable<br />/link/1 => /link/{id}<br />기본값 설정 가능<br /> @RequestMapping(value = "/link/{id}", method = RequestMethod...
hiddenMethodFilter<br />기본값: _method<br /><filter><br />	<filter-name>httpMethodFilter</filter-name><br />	<filter-class>o...
스프링 form 태그<br />form 태그 사용하면 PUT, DELETE 사용시 자동으로 히든파라미터로 값 넘겨줌.<br /><%@ taglib prefix="form" uri="http://www.springfram...
ContentsNegotiatingViewResolver이게 없다면…<br />if ("xml".equals(req.getParameter("type"))) { <br />  return new ModelAndView(...
ContentsNegotiatingViewResolver이게 있다면?<br />
ContentsNegotiatingViewResolver동작 방식<br />미디어 타입 결정<br />뷰 후보 선정<br />최종 뷰 결정<br />
1. 미디어 타입 결정<br />URL 확장자로 결정<br />/book.json<br />요청 파라미터로 결정<br />/book?format=json<br />Access 헤더 정보로 결정<br />defaultCo...
2. 뷰 후보 선정<br />viewResolvers미사용시: 서블릿콘텍스트에 등록된 모든 ViewResolver사용해서 뷰후보 선정<br />viewResolvers사용시: 모든 뷰리졸버가 돌려주는 뷰를 후보 목록에 ...
3. 최종 뷰 결정<br />미디어 타입과 뷰 목록 비교해서 뷰 결정<br />뷰의 contents-type과미디어타입비교<br />예제<br />미디어 타입은 JSON<br />뷰 후보: JSON 뷰, JSTL 뷰, ...
RestTemplate<br />Spring 3.0 M2 추가됨.<br />Spring’sTemplateseries와 비슷한 형태(JdbcTemplate, JmsTemplate ... )<br />RESTful 스타일 ...
RestTemplate Hierarchy<br />
RestTemplate methods<br />
HttpRequests<br />Default<br />SimpleClientHttpRequest(java.net. HttpURLConnection)<br />CommonsClientHttpRequest (jakarta...
HttpMessageConverters<br />Default<br />
RestTemplate – 사용전<br />String uri = "http://example.com/hotels/1/bookings"; <br />PostMethod post = new PostMethod(uri); ...
RestTemplate – 사용후<br />String uri = "http://example.com/hotels/{id}/bookings"; <br />RestOperations restTemplate = new Re...
Authentication<br />
RestTemplate @ Twitter RESTful<br />
Upcoming SlideShare
Loading in …5
×

스프링 3.0 RESTful & restTemplate

10,511 views

Published on

2010 한국 자바 개발자 페스티벌 발표자료.

Published in: Technology, Business
  • Be the first to comment

스프링 3.0 RESTful & restTemplate

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

×