상세 컨텐츠

본문 제목

스프링4.0 이전 부터 사용한 RestAPI처리 방식인 JsonView설명

JSP·자바·코틀린

by 김일국 2021. 7. 6. 21:51

본문

우선 2010년 부터 사용한 JsonView 방식을 설명하기 전에 최신 버전부터 설명 드립니다.

#스프링4.0 이상부터는 @RestContorller를 사용합니다.(@Controller와 @ResponseBody 을 합쳐놓은것 이상)

자세한 설명을 하기 전에 @ResponseBody를 사용해 봅니다.(아래)

//RestAPI서버 맛보기ID중복체크(제대로 만들면 @RestController 사용)
@RequestMapping(value="/id_check", method=RequestMethod.GET)
@ResponseBody //반환받은 값의 헤더값을 제외하고, 내용(body)만 반환하겠다는 명시
public String id_check(@RequestParam("user_id")String user_id) throws Exception {
//중복아이디를 체크로지(아래)
String memberCnt = "1";//중복ID가 있을때, 기본값 1
if(!user_id.isEmpty()) {//!주의 user_id가 공백이 아니라면,
MemberVO memberVO = memberService.readMember(user_id);
logger.info("디버그: " + memberVO);//user_id를 공백을 전송해도 null이기때문에 조건 추가필요
if(memberVO == null) {//중복아이디가 존재하지 않으면 {}안을 실행
memberCnt = "0";
}
}
return memberCnt;//0.jsp 이렇게 작동하지 않습니다. 이유는 @ResponseBody때문이고, RestAPI는 값만 반환
}

- 기존 jsp소스는 아래와 같습니다.

$.ajax({
type:"get",
url:"/id_check?user_id="+$(this).val(),
dataType:"text",
success:function(result) {
if(result == 0) {//중복ID가 존재하지 않으면
$("#btn_insert").attr("disabled",false);
$("#btn_insert").css("opacity","1");
$("#msg").remove();
$("#user_id_lbl").after("<div id='msg' style='color:blue'>사용가능한 ID입니다</div>");
}else{//중복아이디가 존재할때 아래 실행
$("#btn_insert").attr("disabled",true);
$("#btn_insert").css("opacity","0.5");
$("#msg").remove();
$("#user_id_lbl").after("<div id='msg' style='color:red'>중복ID가 존재합니다.</div>");
}
},
error:function() {
alert("RestAPI서버가 작동하지 않습니다. 다음에 이용해 주세요.");
}
});

Ps. RestController 기술참조 https://highcode.tistory.com/24

 

[Spring] Restful한 스프링 @ResponseBody vs @RestController

Spring 에서 restful 하게 작성하기 위해 @Controller 내에 @ResponseBody 사용하거나 혹은 @RestController 을 사용할 수 있습니다. 스프링 MVC 프레임 워크와 REST 일반적인 Spring MVC 컨트롤러와 RESTful 웹..

highcode.tistory.com

- 레스트컨트롤러 설명(아래)

@RestController
public class ReplyController {
private Logger logger = LoggerFactory.getLogger(ReplyController.class);
@Inject
private IF_ReplyService replyService;

//댓글 삭제를 RestFul로 처리
@RequestMapping(value="/reply/reply_delete/{bno}/{rno}", method=RequestMethod.DELETE)
public ResponseEntity<String> reply_delete(@PathVariable("bno")Integer bno,@PathVariable("rno")Integer rno) {
ResponseEntity<String> result = null;
ReplyVO replyVO = new ReplyVO();
replyVO.setBno(bno);
replyVO.setRno(rno);
try {
replyService.deleteReply(replyVO);
result = new ResponseEntity<String>("success",HttpStatus.OK);
} catch (Exception e) {
result = new ResponseEntity<String>(HttpStatus.INTERNAL_SERVER_ERROR);
}
return result;
}

 

}

 

==========================================================

위 RestController 방식으로 충분 하지만, 2010년 부터 이용된 구형 솔루션을 사용한다면 아래 내용을 알고 있어야 함. 

==========================================================

#스프링4 이전 소스에서는 jsonTemplate 를 사용합니다.(아래)

@RequestMapping(value="/id_check_old", method=RequestMethod.GET)
public String id_check_old(@RequestParam("user_id")String user_id, Model model) throws Exception {
//중복아이디를 체크로지(아래)
String memberCnt = "1";//중복ID가 있을때, 기본값 1
if(!user_id.isEmpty()) {//!주의 user_id가 공백이 아니라면,
MemberVO memberVO = memberService.readMember(user_id);
logger.info("디버그29: " + memberVO);//user_id를 공백을 전송해도 null이기때문에 조건 추가필요
if(memberVO == null) {//중복아이디가 존재하지 않으면 {}안을 실행
memberCnt = "0";
}
}
model.addAttribute("memberCnt",memberCnt);
return "jsonTemplate";//MappingJackson2JsonView 스프링빈사용
}

기존 솔루션이 위와 같은 MappingJackson2JsonView 스프링빈사용한다면 servlet-context.xml파일의 설정은 아래와 같습니다.

<!-- 아래 order 라인만 추가 -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="order" value="2" />
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>

<!-- BeanNameViewResolver 설정추가 컨트롤러의 view이름을 파일명이 아닌 빈으로 리턴받을 수 있음.  -->
<beans:bean id="viewResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver">
  <beans:property name="order" value="1" />
</beans:bean>
<!-- MappingJackson2JsonView 설정추가 -->
<beans:bean id="jsonTemplate" class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/>

- jsp 파일은 아래처럼 변경 합니다.

$.ajax({
type:"get",
url:"/id_check_old?user_id="+$(this).val(),
            dataType: "json",//받는 데이터
success:function(result) {
if(result.memberCnt == 0) {//중복ID가 존재하지 않으면
$("#btn_insert").attr("disabled",false);
$("#btn_insert").css("opacity","1");
$("#msg").remove();
$("#user_id_lbl").after("<div id='msg' style='color:blue'>사용가능한 ID입니다</div>");
}else{//중복아이디가 존재할때 아래 실행
$("#btn_insert").attr("disabled",true);
$("#btn_insert").css("opacity","0.5");
$("#msg").remove();
$("#user_id_lbl").after("<div id='msg' style='color:red'>중복ID가 존재합니다.</div>");
}
},
error:function() {
alert("RestAPI서버가 작동하지 않습니다. 다음에 이용해 주세요.");
}
});

 

Ps. JsonView 기술참조

https://tychejin.tistory.com/138

 

[Spring] REST JSON Response 예제

1.BeanNameViewResolver, MappingJackson2JsonView 적용  BeanNameViewResolver 클래스는 뷰 이름과 동일한 이름을 갖는 빈을 뷰 객체로 사용합니다. BeanNameViewResolver는 주로 커스텀 View 클래스를 뷰로 사..

tychejin.tistory.com

https://atlasia.tistory.com/20

 

[Spring framework] 자주쓰는 view Resolver 셋팅하기 ( ModelAndView-Ajax 편)

[pom.xml] com.fasterxml.jackson.core jackson-core 2.7.0 com.fasterxml.jackson.core jackson-databind 2.7.0 com.fasterxml.jackson.core jackson-annotations 2.7.0 [서블릿 설정 xml ] spring 3.x 이상, jac..

atlasia.tistory.com

Ps. $.ajax 기술참조: http://www.ktword.co.kr/abbr_view.php?m_temp1=5782

 

제이쿼리 ajax [정보통신기술용어해설]

 

www.ktword.co.kr

 

관련글 더보기

댓글 영역