이번 내용은 리다이렉트전송시parameter를 URL에 붙여서 전송하기 싫어하는 분들을 위한 포스팅입니다.Spring3 에서 제공하는RedirectAttributes를 사용하면redirect post 구현이 가능합니다.하지만 일회성입니다.새로고침하면 날라가는 데이터이므로사용목적에 따라서 사용/불가능 판단을 잘 하셔야 할거 같습니다.컨트롤러에 일반 GET방식..
Spring3 에서 추가된 기능중 하나인 @Pathvariable 어노테이션에대하여 포스팅 하고자 합니다.말그대로 URL 경로에 변수를 넣어주는 기능입니다.컨트롤러에서 사용법은 다음과 같습니다. /** * Pathvariable 예제 * @return */ @RequestMapping("/page/{var}") public String page(@Pa..
이번에는 JSON 값을 RESPONSE 해주기 관련 포스팅을 진행해보도록 하겠습니다.Spring을 제외한 다른 포스팅에 보통 json-simple 라이브러리를 이용하여json 구현을 했었습니다.그러나 Spring3 에서 jackson 라이브러리와 Responsebody 어노테이션을 같이 사용하니엄청나게 심플하게 구현이 되는군요.보통 JSON 객체를 생성하는..
이번 내용은 리다이렉트 전송시
parameter를 URL에 붙여서 전송하기 싫어하는 분들을 위한 포스팅입니다.
Spring3 에서 제공하는 RedirectAttributes를 사용하면
redirect post 구현이 가능합니다.
하지만 일회성입니다.
새로고침하면 날라가는 데이터이므로
사용목적에 따라서 사용/불가능 판단을 잘 하셔야 할거 같습니다.
컨트롤러에 일반 GET방식 테스트를위한 컨트롤러를 만들도록 하겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | /** * redirect페이지로 넘기기 위한 컨트롤러 * @return */ @RequestMapping ( "/redirectpage" ) public String redirectpage(){ return "redirect:/herepage?key1=value1&key2=value2" ; } /** * redirect되는 컨트롤러 * @return */ @RequestMapping ( "/herepage" ) public String herepage( @ModelAttribute (value= "vo" ) RedirectVo vo){ return "herepage" ; } |
herepage 컨트롤러에 return 페이지인 herepage.jsp파일을 views 디렉토리내에 생성 후
다음과 같이 body 태그에 코드를 추가해보도록 합니다.
1 2 3 | < h2 >Redirect 페이지</ h2 > key1 :: ${vo.key1 }< br /> key2 :: ${vo.key2 } |
리다이렉트 테스트를 위하여 호출을 해보도록 하겠습니다.
위처럼 화면에 value값이 화면에 출력이 되었습니다.
하지만 브라우저 URL뒤에 PARAMETER값들이 붙어있습니다.
브라우저내에 parameter값이 안붙게끔 RedirectAttributes를 이용해보도록 하겠습니다.
다음 컨트롤러를 추가 해보겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 | /** * redirect 신규페이지로 넘기기 위한 컨트롤러 * @return */ @RequestMapping ( "/redirectnewpage" ) public String redirectnewpage(RedirectAttributes redirectAttributes){ Map<String, Object> map = new HashMap<String,Object>(); map.put( "key1" , "value1" ); map.put( "key2" , "value2" ); redirectAttributes.addFlashAttribute( "vo" , map); return "redirect:/herepage" ; } |
RedirectAttributes의 addFlashAttribute메서드에 key/value로 웹페이지에 값을 넘겨줄수 있지만
하나의 key값으로 넘겨주어야 하므로 여러개의 값을 페이지로 넘겨 줄 경우
list나 map 형태의 객체를 value로 담아서 넘겨주면 되겠습니다.
RedirectAttributes를 이용하여 최초 GET방식으로 REDIRECT 해줬던 RETURN 페이지와 동일합니다.
herepage 컨트롤러의 코드일부를 변경하보도록 하겠습니다.
herepage parameter인 "@ModelAttribute(value="vo") RedirectVo vo" 코드를 삭제해줍니다.
삭제가 되면 다음처럼 코드가 변경되겠습니다.
1 2 3 4 5 6 7 8 | /** * redirect되는 컨트롤러 * @return */ @RequestMapping ( "/herepage" ) public String herepage(){ return "herepage" ; } |
이제 신규 리다이렉트 컨트롤러를 호출해보도록 하겠습니다.
위와같이 URL에 PARAMETER가 붙지않고 정상적으로 웹페이지에 결과값을 출력하였습니다.
하지만 새로고침을 하게된다면?
위와같이 빈값으로 나오게 됩니다.
필요여부에 따라 사용하시면 되겠습니다.
by 개발로짜
Spring3 Maven을 이용하여 pom.xml에 oracle,mysql,mssql jdbc 라이브러리 등록하기 (0) | 2014.11.14 |
---|---|
Spring3 인터셉터와 세션을이용하여 로그인 처리해보기 (2) | 2014.11.12 |
Spring3 Pathvariable 어노테이션을 이용하여 PARAMETER를 URL처럼 받아보기 (0) | 2014.11.11 |
Spring3 jackson JSON 라이브러리 + ResponseBody 이용하여 JSON 파싱하기 (0) | 2014.11.10 |
Spring3 RESTFUL 방식 리소스파일 및 favicon 인식할수 있게 설정하기 (3) | 2014.11.07 |
Spring3 에서 추가된 기능중 하나인 @Pathvariable 어노테이션에 대하여 포스팅 하고자 합니다.
말그대로 URL 경로에 변수를 넣어주는 기능입니다.
컨트롤러에서 사용법은 다음과 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | /** * Pathvariable 예제 * @return */ @RequestMapping ( "/page/{var}" ) public String page( @PathVariable String var){ String returnUrl = "" ; if (var.equals( "one" )) { returnUrl = "page1" ; } else if (var.equals( "two" )) { returnUrl = "page2" ; } return returnUrl; } |
RequestMapping의 URL 정의 부분과 Method 내의 Parameter 부분에
정의를 하여 사용이 가능합니다.
연결관계는
처럼 관계를 가져야 합니다.
상단 코드에서 return값으로 정해준 url 페이지를 2개 생성 해보도록 하겠습니다.
1 | < h2 >PAGE1.JSP</ h2 > |
1 | < h2 >PAGE2.JSP</ h2 > |
그럼 각 페이지별 출력을 위하여 실행을 해보도록 하겠습니다.
실행결과 정상적으로 @pathvariable 어노테이션을 이용하여
변수로 구분된 경로에 따른 returnURL 페이지 출력이 나왔습니다.
이 어노테이션을 사용한다면 한페이지로 여러개의 동일한 화면을 구분하게끔 구현이 가능할 것입니다.
이어서 일반 GET 방식과의 차이점에 대해서 비교를 해보도록 하겠습니다.
이번코드에서는 별도의 RETURN 페이지를 생성하지 않고 콘솔에서 데이터를 받기만 하도록 하겠습니다.
2가지 방식의 컨트롤러를 만들어 봅니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /** * GET방식 컨트롤러 * @param key1 * @param key2 */ @RequestMapping ( "/resultByGet" ) public void resultByGet(String key1, String key2){ System.out.println( "key1::" +key1); System.out.println( "key2::" +key2); } /** * Pathvariable방식 컨트롤러 * @param key1 * @param key2 */ @RequestMapping ( "/resultByPath/{key1}/{key2}" ) public void resultByPath( @PathVariable String key1, @PathVariable String key2){ System.out.println( "key1::" +key1); System.out.println( "key2::" +key2); } |
위 코드는 같은 결과를 출력시키는 코드입니다.
단, 호출방식만 다를뿐...
각각 실행을 해보도록 하겠습니다.
다른방식이지만 같은 결과값이 출력되었습니다.
원하는 방법에 따라 사용하시면 되겠습니다.
by 개발로짜
Spring3 인터셉터와 세션을이용하여 로그인 처리해보기 (2) | 2014.11.12 |
---|---|
Spring3 RedirectAttributes 사용한 redirect POST 전송법 (0) | 2014.11.11 |
Spring3 jackson JSON 라이브러리 + ResponseBody 이용하여 JSON 파싱하기 (0) | 2014.11.10 |
Spring3 RESTFUL 방식 리소스파일 및 favicon 인식할수 있게 설정하기 (3) | 2014.11.07 |
Spring3 파일전송을 위한 multipartResolver 설정하기 (2) | 2014.11.07 |
이번에는 JSON 값을 RESPONSE 해주기 관련 포스팅을 진행해보도록 하겠습니다.
Spring을 제외한 다른 포스팅에 보통 json-simple 라이브러리를 이용하여
json 구현을 했었습니다.
그러나 Spring3 에서 jackson 라이브러리와 Responsebody 어노테이션을 같이 사용하니
엄청나게 심플하게 구현이 되는군요.
보통 JSON 객체를 생성하는 방식은 클라이언트에 JSON API 를 제공할때 주로 사용됩니다.
2가지 방식을 예로 들수 있겠는대요
Map 형식으로 response 해주는 방식과
vo객체에 담아서 object형식으로 response해주는
2가지 방식을 들 수 있겠습니다.
각각의 예제에 들어가기전 jackson 라이브러리 사용을 위한 설정을 해주도록 합니다.
다음 dependency 코드를 pom.xml에 추가해줍니다.
1 2 3 4 5 | < dependency > < groupId >org.codehaus.jackson</ groupId > < artifactId >jackson-mapper-asl</ artifactId > < version >1.9.13</ version > </ dependency > |
이어서 mvc-config.xml 설정파일에 하단 태그를 추가해주도록 합니다.
1 | < bean id = "jacksonMessageConverter" class = "org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" /> |
위 2가지 코드를 각각의 파일에 삽입을 해주셨다면
Jackson 라이브러리와 @ResponseBody 어노테이션을 이용하여
간단하게 JSON API를 제작해보도록 하겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | /** * Map방식을 이용한 JSON API 컨트롤러 * @return */ @RequestMapping (value= "/getJsonByMap" ) public @ResponseBody Map<String , Object> getJsonByMap() { Map<String, Object> jsonObject = new HashMap<String, Object>(); Map<String, Object> jsonSubObject = null ; ArrayList<Map<String, Object>> jsonList = new ArrayList<Map<String, Object>>(); //1번째 데이터 jsonSubObject = new HashMap<String, Object>(); jsonSubObject.put( "idx" , 1 ); jsonSubObject.put( "title" , "제목입니다" ); jsonSubObject.put( "create_date" , new Date()); jsonList.add(jsonSubObject); //2번째 데이터 jsonSubObject = new HashMap<String, Object>(); jsonSubObject.put( "idx" , 2 ); jsonSubObject.put( "title" , "두번째제목입니다" ); jsonSubObject.put( "create_date" , new Date()); jsonList.add(jsonSubObject); jsonObject.put( "success" , true ); jsonObject.put( "total_count" , 10 ); jsonObject.put( "result_list" , jsonList); return jsonObject; } |
최상단 루트 Map 객체에 다양한 종류의 map 객체들 및 list 객체들을 put 해주었습니다.
적용 후 실행을 해보도록 하겠습니다.
정상적으로 JSON 규격에 맞춰져서 API 데이터가 출력되었습니다.
이번에는 보통 말하는 VO 객체를 사용하여
JSON 객체를 클라이언트 페이지로
RESPONSE 해주도록 해보겠습니다.
vo 패키지에 다음과 같은 2개의 vo 클래스를 생성합니다.
VO 클래스에 들어가는 코드를 다음과 같이 작성해주세요
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | public class ListVo { private int idx; private String title; private String create_date; public int getIdx() { return idx; } public void setIdx( int idx) { this .idx = idx; } public String getTitle() { return title; } public void setTitle(String title) { this .title = title; } public String getCreate_date() { return create_date; } public void setCreate_date(String create_date) { this .create_date = create_date; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | public class ObjectVo { private boolean success; private ArrayList<ListVo> list; private int total_count; public boolean isSuccess() { return success; } public void setSuccess( boolean success) { this .success = success; } public ArrayList<ListVo> getList() { return list; } public void setList(ArrayList<ListVo> list) { this .list = list; } public int getTotal_count() { return total_count; } public void setTotal_count( int total_count) { this .total_count = total_count; } } |
구조는 기존 Map 방식의 JSON 구조와 동일한 형식입니다.
마지막으로 Controller 부분 코드입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | /** * VO방식을 이용한 JSON API 컨트롤러 * @return */ @RequestMapping (value= "/getJsonByVO" ) public @ResponseBody ObjectVo getJsonByVO() { Calendar cal = Calendar.getInstance( ); ArrayList<ListVo> list = new ArrayList<ListVo>(); ListVo vo = null ; ObjectVo objectVO = new ObjectVo(); //1번째 데이터 vo = new ListVo(); vo.setIdx( 1 ); vo.setTitle( "VO방식의 제목입니다" ); vo.setCreate_date(cal.get(Calendar.YEAR)+ "-" +(cal.get(Calendar.MONTH) + 1 )+ "-" +cal.get(Calendar.DAY_OF_MONTH)); list.add(vo); //2번째 데이터 vo = new ListVo(); vo.setIdx( 1 ); vo.setTitle( "VO방식의 제목입니다2" ); vo.setCreate_date(cal.get(Calendar.YEAR)+ "-" +(cal.get(Calendar.MONTH) + 1 )+ "-" +cal.get(Calendar.DAY_OF_MONTH)); list.add(vo); objectVO.setList(list); objectVO.setSuccess( true ); objectVO.setTotal_count( 10 ); return objectVO; } |
위 코드 역시 임의의 데이터를 담아서 RESPONSE 결과를
확인하기 위하여 SET을 해준것입니다.
만약 ibatis 혹은 mybatis를 사용하시게 된다면
해당 SET 코드를 하실 필요는 없겠죠?
실행을 해보도록 하겠습니다.
VO 결과 역시 정상적으로 JSON 결과값을 출력하였습니다.
Spring3 을 이용하여 JSON API 작업을 할때 사용하시면 좋을 거 같습니다.
by 개발로짜
Spring3 RedirectAttributes 사용한 redirect POST 전송법 (0) | 2014.11.11 |
---|---|
Spring3 Pathvariable 어노테이션을 이용하여 PARAMETER를 URL처럼 받아보기 (0) | 2014.11.11 |
Spring3 RESTFUL 방식 리소스파일 및 favicon 인식할수 있게 설정하기 (3) | 2014.11.07 |
Spring3 파일전송을 위한 multipartResolver 설정하기 (2) | 2014.11.07 |
Spring3 한글깨짐 방지를 위한 UTF-8 인코딩 설정하기 (6) | 2014.11.06 |
내 블로그 - 관리자 홈 전환 |
Q
Q
|
---|---|
새 글 쓰기 |
W
W
|
글 수정 (권한 있는 경우) |
E
E
|
---|---|
댓글 영역으로 이동 |
C
C
|
이 페이지의 URL 복사 |
S
S
|
---|---|
맨 위로 이동 |
T
T
|
티스토리 홈 이동 |
H
H
|
단축키 안내 |
Shift + /
⇧ + /
|
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.