스프링 3.0 & RESTful

    백기선, 김성윤
봄싹 즐겨찾기 서비스
To Do
•   링크   등록
•   링크   목록 조회
•   링크   조회
•   링크   수정
•   링크   삭제
즐겨찾기 서비스 URL
작업           URL            Method
목록 조회        /link          GET
추가 (폼)       /link/form     GET
추가 (폼 서브밋)   /link          POST
뷰            /link/1        GET
수정 (폼)       /link/1/form   GET
수정 (폼 서브밋)   /link/1        PUT
삭제           /link/1        DELETE
주요 기술 :: 스프링 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
 @RequestMapping(value = "/link/{id}", method = RequestMethod.GET)
  public String view(@PathVariable int id, Model model){
     model.addAttribute(”link", linkService.get(id));
     return ”link/view";
  }



• /link/1 => /link/{id}
• 기본값 설정 가능
hiddenMethodFilter
<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>

• 기본값: _method
스프링 form 태그
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>


 • form 태그 사용하면 PUT, DELETE 사용시
   자동으로 히든 파라미터로 값 넘겨줌.
<form:form commandName=”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. 미디어 타입 결정

2. 뷰 후보 선정

3. 최종 뷰 결정
1. 미디어 타입 결정
1. URL 확장자로 결정
 –   /book.json


2. 요청 파라미터로 결정
 –   /book?format=json


3. Access 헤더 정보로 결정

4. defaultContentType 속성 값 사용.
2. 뷰 후보 선정
1. viewResolvers 미사용시: 서블릿 콘텍스
   트에 등록된 모든 ViewResolver 사용해서
   뷰 후보 선정

2. viewResolvers 사용시: 모든 뷰 리졸버가
   돌려주는 뷰를 후보 목록에 추가

3. defaultView 속성에 설정한 뷰는 무조건
   후보 목록에 추가
3. 최종 뷰 결정
• 미디어 타입과 뷰 목록 비교해서 뷰 결정
 – 뷰의 contents-type과 미디어 타입 비교


• 예제
 – 미디어 타입은 JSON
 – 뷰 후보: JSON 뷰, JSTL 뷰, XML 뷰
 – 결과: JSON뷰 사용
스프링 3.0 & RESTful
RestTemplate
• Spring 3.0 M2 추가됨.

• Spring’s Template series와 비슷한 형태
 (JdbcTemplate, JmsTemplate ... )

• RESTful 스타일 URL 지원.

• HTTP access 단순화.

• 사용자 정의 콜백 및 결과 추출 클래스 지원.
RestTemplate Hierarchy
RestTemplate methods

HTTP method    RestTemplate methods
GET            getForObject(…)
               getForEntity(…)
POST           postForLocation(…)
               postForObject(…)
PUT            put(…)
DELETE         delete(…)
HEAD           headForHeaders(…)
OPTIONS        optionForAllow(…)
HttpRequests

 SimpleClientHttpRequest
  ( java.net. HttpURLConnection)


CommonsClientHttpRequest
  ( jakarta Commons HttpClient)


 사용자 정의 HttpRequest
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
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


Basic Authentication
• CommonsClientHttpRequest


Open Authorization(OAuth)
• 미지원 (3.1M1 Fix 예정)
RestTemplate @ Twitter RESTful

More Related Content

PDF
REST with Spring
PPTX
Json view 예제 설명
PPTX
스프링 3.0 RESTful & restTemplate
PDF
Express 프레임워크
PPTX
4-2. ajax
PDF
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration
PDF
Spring boot 공작소(1-4장)
PDF
Spring-Boot (springcamp2014)
REST with Spring
Json view 예제 설명
스프링 3.0 RESTful & restTemplate
Express 프레임워크
4-2. ajax
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration
Spring boot 공작소(1-4장)
Spring-Boot (springcamp2014)

What's hot (20)

PDF
Spring boot 5장 cli
PDF
04.실행환경 실습교재(화면처리)
PDF
03.실행환경 실습교재(배치처리)
PDF
03.실행환경 교육교재(배치처리)
PDF
JSP 프로그래밍 #05 HTML과 JSP
PPTX
5-5. html5 connectivity
ODP
Ajax 기술문서 - 김연수
PPTX
Spring boot actuator
PDF
02.실행환경 교육교재(데이터처리)
PDF
spring.io를 통해 배우는 spring 개발사례
PDF
JSP 프로그래밍 #03 서블릿
PPTX
3-2. selector api
PPTX
5-4. html5 offline and storage
PPTX
5-3. html5 device access
PPTX
One-day-codelab
PDF
#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
PDF
04.[참고]개발환경 실습교재
PDF
실전! 스프링과 함께하는 환경변수 관리 변천사 발표자료
PPTX
Nodejs, PhantomJS, casperJs, YSlow, expressjs
PDF
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
Spring boot 5장 cli
04.실행환경 실습교재(화면처리)
03.실행환경 실습교재(배치처리)
03.실행환경 교육교재(배치처리)
JSP 프로그래밍 #05 HTML과 JSP
5-5. html5 connectivity
Ajax 기술문서 - 김연수
Spring boot actuator
02.실행환경 교육교재(데이터처리)
spring.io를 통해 배우는 spring 개발사례
JSP 프로그래밍 #03 서블릿
3-2. selector api
5-4. html5 offline and storage
5-3. html5 device access
One-day-codelab
#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
04.[참고]개발환경 실습교재
실전! 스프링과 함께하는 환경변수 관리 변천사 발표자료
Nodejs, PhantomJS, casperJs, YSlow, expressjs
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
Ad

Similar to 스프링 3.0 & RESTful (20)

PPTX
[스프링 스터디 3일차] @MVC
KEY
vine webdev
PPTX
Ksug 세미나 (윤성준) (20121208)
PDF
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
PPTX
Atom publishing protocol
PPTX
파이썬 플라스크 이해하기
PDF
ASP.NET Web API를 이용한 오픈 API 개발
PPT
Spring MVC
PPTX
HeadFisrt Servlet&JSP Chapter 3
 
PDF
[오픈소스컨설팅]Spring MVC
PPTX
Html5
PPTX
[112]rest에서 graph ql과 relay로 갈아타기 이정우
PPTX
Angular2 router&http
PDF
막하는스터디 두번째만남 Express(20151025)
PPTX
4-3. jquery
PPTX
HTTP web server 구현
PDF
Elastic Search (엘라스틱서치) 입문
PDF
HeadFisrt Servlet&JSP Chapter 13
 
PDF
Servlet jsp 13장
PDF
다시보는 Angular js
[스프링 스터디 3일차] @MVC
vine webdev
Ksug 세미나 (윤성준) (20121208)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
Atom publishing protocol
파이썬 플라스크 이해하기
ASP.NET Web API를 이용한 오픈 API 개발
Spring MVC
HeadFisrt Servlet&JSP Chapter 3
 
[오픈소스컨설팅]Spring MVC
Html5
[112]rest에서 graph ql과 relay로 갈아타기 이정우
Angular2 router&http
막하는스터디 두번째만남 Express(20151025)
4-3. jquery
HTTP web server 구현
Elastic Search (엘라스틱서치) 입문
HeadFisrt Servlet&JSP Chapter 13
 
Servlet jsp 13장
다시보는 Angular js
Ad

More from JavaCommunity.Org (7)

PDF
안드로이드와 이통사 확장 API
PDF
안드로이드 플랫폼기반의 푸시서버 아키텍처
PDF
이클립스와 안드로이드
PDF
Jetty Continuation - 이상민
PDF
결합도 관점에서 본 VO 문제점
PDF
E-Gov 기반 Mobile Web Friendly 개발
PDF
RESTful Java
안드로이드와 이통사 확장 API
안드로이드 플랫폼기반의 푸시서버 아키텍처
이클립스와 안드로이드
Jetty Continuation - 이상민
결합도 관점에서 본 VO 문제점
E-Gov 기반 Mobile Web Friendly 개발
RESTful Java

스프링 3.0 & RESTful

  • 1. 스프링 3.0 & RESTful 백기선, 김성윤
  • 3. To Do • 링크 등록 • 링크 목록 조회 • 링크 조회 • 링크 수정 • 링크 삭제
  • 4. 즐겨찾기 서비스 URL 작업 URL Method 목록 조회 /link GET 추가 (폼) /link/form GET 추가 (폼 서브밋) /link POST 뷰 /link/1 GET 수정 (폼) /link/1/form GET 수정 (폼 서브밋) /link/1 PUT 삭제 /link/1 DELETE
  • 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 @RequestMapping(value = "/link/{id}", method = RequestMethod.GET) public String view(@PathVariable int id, Model model){ model.addAttribute(”link", linkService.get(id)); return ”link/view"; } • /link/1 => /link/{id} • 기본값 설정 가능
  • 8. hiddenMethodFilter <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> • 기본값: _method
  • 9. 스프링 form 태그 <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> • form 태그 사용하면 PUT, DELETE 사용시 자동으로 히든 파라미터로 값 넘겨줌. <form:form commandName=”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); }
  • 11. ContentsNegotiatingViewResolver 이게 있다면?
  • 12. ContentsNegotiatingViewResolver 동작 방식 1. 미디어 타입 결정 2. 뷰 후보 선정 3. 최종 뷰 결정
  • 13. 1. 미디어 타입 결정 1. URL 확장자로 결정 – /book.json 2. 요청 파라미터로 결정 – /book?format=json 3. Access 헤더 정보로 결정 4. defaultContentType 속성 값 사용.
  • 14. 2. 뷰 후보 선정 1. viewResolvers 미사용시: 서블릿 콘텍스 트에 등록된 모든 ViewResolver 사용해서 뷰 후보 선정 2. viewResolvers 사용시: 모든 뷰 리졸버가 돌려주는 뷰를 후보 목록에 추가 3. defaultView 속성에 설정한 뷰는 무조건 후보 목록에 추가
  • 15. 3. 최종 뷰 결정 • 미디어 타입과 뷰 목록 비교해서 뷰 결정 – 뷰의 contents-type과 미디어 타입 비교 • 예제 – 미디어 타입은 JSON – 뷰 후보: JSON 뷰, JSTL 뷰, XML 뷰 – 결과: JSON뷰 사용
  • 17. RestTemplate • Spring 3.0 M2 추가됨. • Spring’s Template series와 비슷한 형태 (JdbcTemplate, JmsTemplate ... ) • RESTful 스타일 URL 지원. • HTTP access 단순화. • 사용자 정의 콜백 및 결과 추출 클래스 지원.
  • 19. RestTemplate methods HTTP method RestTemplate methods GET getForObject(…) getForEntity(…) POST postForLocation(…) postForObject(…) PUT put(…) DELETE delete(…) HEAD headForHeaders(…) OPTIONS optionForAllow(…)
  • 20. HttpRequests SimpleClientHttpRequest ( java.net. HttpURLConnection) CommonsClientHttpRequest ( jakarta Commons HttpClient) 사용자 정의 HttpRequest
  • 21. 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
  • 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);
  • 24. Authentication Basic Authentication • CommonsClientHttpRequest Open Authorization(OAuth) • 미지원 (3.1M1 Fix 예정)