우선 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
- 레스트컨트롤러 설명(아래)
@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
https://atlasia.tistory.com/20
Ps. $.ajax 기술참조: http://www.ktword.co.kr/abbr_view.php?m_temp1=5782
스프링 부트로 시작하는 웹 서비스_2 (0) | 2021.08.01 |
---|---|
스프링 부트로 시작하는 웹 서비스_1시작 (0) | 2021.07.30 |
URL인코딩을 첨부파일 다운로드에 적용시 (0) | 2021.06.24 |
[수업용자료]hsql DB생성용 스크립트와 공용쿼리추가 (0) | 2021.06.19 |
이클립스 오류 기본 클래스 을(를) 찾거나 로드할 수 없습니다 처리 (0) | 2021.05.25 |
댓글 영역