RadarURL
Skip to content
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

Spring MVC 에서 하나의 Request 요청이 올때 보통 비지니스 로직을 거쳐, 가공된 데이터는 jsp 나 freemarker 같은 view단으로 보내지게 됩니다.

하지만 기존웹 & 모바일웹과 네이티브 모바일앱에 모두 대처하기 위해서는 단일 Request에서 해당 데이터를 jsp와 같은 view단을 위한 request mapping 뿐만 아니라, 모바일 Client을 위한 json , 크로스 도메인에 대처하기 위한 jsonp 까지 제공할려면 어떻게 해야 할까요.


예를 들어,

http://localhost/member/profile - 전통적인 view를 보여줍니다.
http://localhost/member/profile.json - json형태를 반화
http://localhost/member/profile.jsonp - jsonp 형태를 변환


ContentNegotiatingViewResolver


ContentNegotiatingViewResolver 를 이용하면, 위와 같이 하나의 URI에 *.json 등과같이 mediaType 에 변화를 줌으로써 해당 형태의 페이지를 각각 제공 해 줄 수 있습니다.


ContentNegotiatingViewResolver 의 사용 방법은 아래와 같습니다.

<bean class=" org.springframework.web.servlet.view.contentnegotiatingviewresolver">

<!-- ViewResolver 우선순위 설정 -->
<property name="order" value="1" />
<property name="mediaTypes">
<!-- 맵핑될 확장자 정의 -->
<map>
<entry key="json" value="application/json" />
<entry key="jsonp" value="javascript/jsonp" />
</map>
</property>
<property name="defaultViews">
<list>
<!-- JSON 요청을 처리할 뷰 -->
<bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"/>
<!-- JSONP 요청을 처리할 뷰 -->
<bean class="com.jce.commons.controller.JSONPView">
<property name="contentType" value="javascript/jsonp"/>
</bean>
</list>
</property>
<property name="ignoreAcceptHeader" value="true" />
< /bean>



  • 기존의 FreeMarkerViewResolver 위에 위와 같이 ContentNegotiatingViewResolver를 정의합니다.
    mediaTypes의 entry의 key에 json, jsonp 등과 같이 원하는 형식의 mediaType 을 설정하고,
    entry에 view에는 json이라면 application/json과 같이 contentType을 설정합니다
    .
  • 설정된 mediaType 정보를 바탕으로 아래쪽 defaultViews 목록에 정의된 view들 중에서 랜더링 가능한 view를 찾게 됩니다. 그 기준은 defaultView의 list에 정의된 view class의 contentType 입니다.
  • list 의 JSONPView 같은 경우는 jsonp를 위해 정의한 클래스인데, 이와 같이 필요해 따라 개발자가 AbstractView를 상속받아 직접 구현 할 수 도 있습니다.



JSONPView

public class JSONPView extends AbstractView {

@Override
protected void renderMergedOutputModel(Map<String, Object> model,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
String callback = request.getParameter("callback")!=null?request.getParameter("callback"):"?";
ObjectMapper om = new ObjectMapper();
String json = om.writeValueAsString(model);
response.setContentType("javascript/jsonp");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(callback+"("+json+");");
}

}

Controller

@Controller
@RequestMapping("/member")
public class MemberContoller extends BaseController {
@RequestMapping(value="/profile", method=RequestMethod.GET)
public void profile(Model model) throws Exception {
List<Map<String,Object>> dataList = new ArrayList<Map<String, Object>>();
Map<String, Object> data = new HashMap<String,Object>();
data.put("name","정민혁");
data.put("lv:",10);
dataList.add(data);
data = new HashMap<String,Object>();
data.put("name","잡스");
data.put("lv",99);
dataList.add(data);
model.addAttribute("personList", dataList);
}
}


실제로 테스트 해보겠습니다.

default

normal.png

jsonp

jsonp.png

json

json.png

출처 : http://stunstun.tistory.com/37

?

  1. No Image 20Oct
    by JAESOO
    2016/10/20 by JAESOO
    Views 602 

    리눅스(Linux) 디렉토리 구조

  2. No Image 26Aug
    by JAESOO
    2016/08/26 by JAESOO
    Views 709 

    ssh서버가 비밀번호를 거부했습니다. 다시 시도하십시오.

  3. No Image 26Aug
    by JAESOO
    2016/08/26 by JAESOO
    Views 717 

    [리눅스] IP 설정 변경 하기

  4. No Image 13Jul
    by JAESOO
    2016/07/13 by JAESOO
    Views 675 

    리눅스 설치후 초기설정해야 할 것들 [2]

  5. No Image 13Jul
    by JAESOO
    2016/07/13 by JAESOO
    Views 702 

    리눅스 설치후 초기설정해야 할 것들 [1]

  6. No Image 12May
    by JAESOO
    2016/05/12 by JAESOO
    Views 540 

    쉘 프로그래밍을 이용한 시스템 관리 기법

  7. No Image 12May
    by JAESOO
    2016/05/12 by JAESOO
    Views 554 

    AIX 자주 쓰이는 관리 명령 모음

  8. No Image 12May
    by JAESOO
    2016/05/12 by JAESOO
    Views 604 

    AIX 시스템상의 core, SMT(Simultaneous Multi Threading) 수 확인하기

  9. No Image 11May
    by JAESOO
    2016/05/11 by JAESOO
    Views 439 

    리눅스 호스트명 변경

  10. No Image 11May
    by JAESOO
    2016/05/11 by JAESOO
    Views 560 

    AIX 서버 기초

  11. No Image 11May
    by JAESOO
    2016/05/11 by JAESOO
    Views 547 

    AIX Admin Study 교육 자료

  12. No Image 05May
    by JAESOO
    2016/05/05 by JAESOO
    Views 489 

    성능 엔지니어링 대한 접근 방법 (Performance tuning)

  13. No Image 04May
    by JAESOO
    2016/05/04 by JAESOO
    Views 552 

    [AIX] 파일시스템 관리 (du, df)

  14. No Image 04May
    by JAESOO
    2016/05/04 by JAESOO
    Views 504 

    IBM AIX Admin (사용자 DISK 관리)

  15. No Image 04May
    by JAESOO
    2016/05/04 by JAESOO
    Views 455 

    [UNIX] 유닉스 기본명령어

  16. No Image 04May
    by JAESOO
    2016/05/04 by JAESOO
    Views 558 

    [AIX] 파일시스템 용량 늘리기

  17. No Image 04May
    by JAESOO
    2016/05/04 by JAESOO
    Views 446 

    유닉스 상에서 ls 출력물을 MB 단위로 출력해주는 옵션

  18. No Image 02May
    by JAESOO
    2016/05/02 by JAESOO
    Views 438 

    ls 명령시 날짜 전체가 보이도록 하기

  19. No Image 31Mar
    by JAESOO
    2016/03/31 by JAESOO
    Views 663 

    리눅스 logrotate 에서 로그파일 강제로 rotate 시키기

  20. No Image 19Mar
    by JAESOO
    2016/03/19 by JAESOO
    Views 733 

    리눅스 시간 맞추기 : Time Server와 Sync (rdate, date)

Board Pagination Prev 1 2 3 4 5 6 7 8 9 Next
/ 9

PageViews   Today : 7996 Yesterday : 5037 Total : 21964048  /  Counter Status   Today : 7714 Yesterday : 4602 Total : 1190437

Edited by JAESOO

sketchbook5, 스케치북5

sketchbook5, 스케치북5

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소