• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
스프링 3.0  RESTful & restTemplate
 

스프링 3.0 RESTful & restTemplate

on

  • 9,554 views

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

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

Statistics

Views

Total Views
9,554
Views on SlideShare
8,978
Embed Views
576

Actions

Likes
6
Downloads
70
Comments
0

3 Embeds 576

http://helols.tistory.com 574
http://www.hanrss.com 1
http://www.slideshare.net 1

Accessibility

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    스프링 3.0  RESTful & restTemplate 스프링 3.0 RESTful & restTemplate Presentation Transcript

    • 스프링3.0 & RESTful
      백기선, 김성윤
    • 봄싹 즐겨찾기 서비스
    • To Do
      링크 등록
      링크 목록 조회
      링크 조회
      링크 수정
      링크 삭제
    • 즐겨찾기 서비스 URL
    • 주요 기술 :: 스프링 3.0 @MVC
      @RequestMapping
      @PathVariable
      hiddenMethodFilter
      스프링 form 태그
      ContentsNegotiatingViewResolver
    • @RequestMapping
      @RequestMapping(value = ”/link/{id}", method = RequestMethod.DELETE)
      public String delete(@PathVariable int id){
      postService.delete(id);
      return ”/link";
      }
      DefaultAnnotationHandlerMapping이 @RequestMapping 정보를 참조해서 핸들러 찾아줌.
    • @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";
      }
    • 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>
    • 스프링 form 태그
      form 태그 사용하면 PUT, DELETE 사용시 자동으로 히든파라미터로 값 넘겨줌.
      <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
      <form:formcommandName=”link" action=”/link/${link.id}" method="PUT">
      <form:form action=”/link/${link.id}" method="DELETE">
    • ContentsNegotiatingViewResolver이게 없다면…
      if ("xml".equals(req.getParameter("type"))) {
      return new ModelAndView(helloMarshallingView, model);
      }
      else {
      return new ModelAndView("/WEB-INF/view/hello.jsp", model);
      }
    • ContentsNegotiatingViewResolver이게 있다면?
    • ContentsNegotiatingViewResolver동작 방식
      미디어 타입 결정
      뷰 후보 선정
      최종 뷰 결정
    • 1. 미디어 타입 결정
      URL 확장자로 결정
      /book.json
      요청 파라미터로 결정
      /book?format=json
      Access 헤더 정보로 결정
      defaultContentType속성 값 사용.
    • 2. 뷰 후보 선정
      viewResolvers미사용시: 서블릿콘텍스트에 등록된 모든 ViewResolver사용해서 뷰후보 선정
      viewResolvers사용시: 모든 뷰리졸버가 돌려주는 뷰를 후보 목록에 추가
      defaultView속성에 설정한 뷰는 무조건 후보 목록에 추가
    • 3. 최종 뷰 결정
      미디어 타입과 뷰 목록 비교해서 뷰 결정
      뷰의 contents-type과미디어타입비교
      예제
      미디어 타입은 JSON
      뷰 후보: JSON 뷰, JSTL 뷰, XML 뷰
      결과: JSON뷰 사용
    • RestTemplate
      Spring 3.0 M2 추가됨.
      Spring’sTemplateseries와 비슷한 형태(JdbcTemplate, JmsTemplate ... )
      RESTful 스타일 URL 지원.
      HTTP access 단순화.
      사용자 정의 콜백 및 결과 추출 클래스 지원.
    • RestTemplate Hierarchy
    • RestTemplate methods
    • HttpRequests
      Default
      SimpleClientHttpRequest(java.net. HttpURLConnection)
      CommonsClientHttpRequest (jakarta Commons HttpClient)
      사용자 정의 HttpRequest
    • HttpMessageConverters
      Default
    • 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());
      }
      }
    • 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);
    • Authentication
    • RestTemplate @ Twitter RESTful