SlideShare a Scribd company logo
스프링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

More Related Content

What's hot

Atom publishing protocol
Atom publishing protocolAtom publishing protocol
Atom publishing protocol
rooya85
 
Servlet&jsp 1장
Servlet&jsp 1장Servlet&jsp 1장
Servlet&jsp 1장
JeongBong Kim
 
vine webdev
vine webdevvine webdev
vine webdev
dcfc1997
 

What's hot (20)

SpringMVC 전체 흐름 알아보기
SpringMVC 전체 흐름 알아보기SpringMVC 전체 흐름 알아보기
SpringMVC 전체 흐름 알아보기
 
JSP 프로그래밍 #03 서블릿
JSP 프로그래밍 #03 서블릿JSP 프로그래밍 #03 서블릿
JSP 프로그래밍 #03 서블릿
 
Atom publishing protocol
Atom publishing protocolAtom publishing protocol
Atom publishing protocol
 
Servlet&jsp 1장
Servlet&jsp 1장Servlet&jsp 1장
Servlet&jsp 1장
 
(스프링 초보자를 위한)스프링 DI관련 어노테이션,자동스캐닝 컴포넌트(Spring Framework Auto-Scanning Component)
(스프링 초보자를 위한)스프링 DI관련 어노테이션,자동스캐닝 컴포넌트(Spring Framework Auto-Scanning Component)(스프링 초보자를 위한)스프링 DI관련 어노테이션,자동스캐닝 컴포넌트(Spring Framework Auto-Scanning Component)
(스프링 초보자를 위한)스프링 DI관련 어노테이션,자동스캐닝 컴포넌트(Spring Framework Auto-Scanning Component)
 
04.[참고]개발환경 실습교재
04.[참고]개발환경 실습교재04.[참고]개발환경 실습교재
04.[참고]개발환경 실습교재
 
[오픈소스컨설팅]Spring MVC
[오픈소스컨설팅]Spring MVC [오픈소스컨설팅]Spring MVC
[오픈소스컨설팅]Spring MVC
 
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
 
Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기
 
Jstl_GETCHA_HANJUNG
Jstl_GETCHA_HANJUNGJstl_GETCHA_HANJUNG
Jstl_GETCHA_HANJUNG
 
02.실행환경 교육교재(데이터처리)
02.실행환경 교육교재(데이터처리)02.실행환경 교육교재(데이터처리)
02.실행환경 교육교재(데이터처리)
 
04.실행환경 실습교재(화면처리)
04.실행환경 실습교재(화면처리)04.실행환경 실습교재(화면처리)
04.실행환경 실습교재(화면처리)
 
vine webdev
vine webdevvine webdev
vine webdev
 
Spring boot actuator
Spring boot   actuatorSpring boot   actuator
Spring boot actuator
 
4-2. ajax
4-2. ajax4-2. ajax
4-2. ajax
 
5-5. html5 connectivity
5-5. html5 connectivity5-5. html5 connectivity
5-5. html5 connectivity
 
(Spring Data JPA)게시판 리스트보기_오라클, 스프링부트,페이지나누기
(Spring Data JPA)게시판 리스트보기_오라클, 스프링부트,페이지나누기(Spring Data JPA)게시판 리스트보기_오라클, 스프링부트,페이지나누기
(Spring Data JPA)게시판 리스트보기_오라클, 스프링부트,페이지나누기
 
[#9.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)]_재직자환급교육/실업자환급교육/구로IT학원/스프링교...
[#9.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)]_재직자환급교육/실업자환급교육/구로IT학원/스프링교...[#9.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)]_재직자환급교육/실업자환급교육/구로IT학원/스프링교...
[#9.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)]_재직자환급교육/실업자환급교육/구로IT학원/스프링교...
 
[NEXT] Andorid에 MVC 패턴 적용하기
[NEXT] Andorid에 MVC 패턴 적용하기[NEXT] Andorid에 MVC 패턴 적용하기
[NEXT] Andorid에 MVC 패턴 적용하기
 
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration
 

Similar to 스프링 3.0 RESTful & restTemplate

[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
NAVER Engineering
 
[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발
NAVER D2
 
Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)
Sungjoon Yoon
 
[Hello world 오픈세미나]open api client개발
[Hello world 오픈세미나]open api client개발[Hello world 오픈세미나]open api client개발
[Hello world 오픈세미나]open api client개발
NAVER D2
 

Similar to 스프링 3.0 RESTful & restTemplate (20)

[스프링 스터디 3일차] @MVC
[스프링 스터디 3일차] @MVC[스프링 스터디 3일차] @MVC
[스프링 스터디 3일차] @MVC
 
Django View Part 1
Django View Part 1Django View Part 1
Django View Part 1
 
#32.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#32.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...#32.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#32.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
 
Angular2 router&http
Angular2 router&httpAngular2 router&http
Angular2 router&http
 
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
 
Rails style-guide-2
Rails style-guide-2Rails style-guide-2
Rails style-guide-2
 
[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기
 
overview of spring4
overview of spring4overview of spring4
overview of spring4
 
Spring MVC
Spring MVCSpring MVC
Spring MVC
 
Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)
 
Booting Spring Data REST
Booting Spring Data RESTBooting Spring Data REST
Booting Spring Data REST
 
HeadFisrt Servlet&JSP Chapter 3
HeadFisrt Servlet&JSP Chapter 3HeadFisrt Servlet&JSP Chapter 3
HeadFisrt Servlet&JSP Chapter 3
 
Spring boot 공작소(1-4장)
Spring boot 공작소(1-4장)Spring boot 공작소(1-4장)
Spring boot 공작소(1-4장)
 
Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기
 
[Hello world 오픈세미나]open api client개발
[Hello world 오픈세미나]open api client개발[Hello world 오픈세미나]open api client개발
[Hello world 오픈세미나]open api client개발
 
HOONS닷넷 오픈소스 프로젝트 Part1.
HOONS닷넷 오픈소스 프로젝트 Part1.HOONS닷넷 오픈소스 프로젝트 Part1.
HOONS닷넷 오픈소스 프로젝트 Part1.
 
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
 
REST Ovewview
REST OvewviewREST Ovewview
REST Ovewview
 
다시보는 Angular js
다시보는 Angular js다시보는 Angular js
다시보는 Angular js
 

스프링 3.0 RESTful & restTemplate

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