본문 바로가기
Spring/Spring 기초

Spring Ajax Post방식 사용 방법

by 미눅스[멘토] 2023. 8. 4.
728x90

1. @RequestParam으로 값 받기

type:get,

dataType: text,

contentType: application/json; charset=UTF-8

-데이터를 URL에 답아서 보낸다.

 

 

AJAX 기본

        let xhr = new XMLHttpRequest();
        xhr.open("POST", "/url", true);  
        xhr.setRequestHeader("content-type", "application/json");
        xhr.onreadystatechange = () => {
            if (xhr.readyState == 4 && xhr.status == 200) {
                let recResult = JSON.parse(xhr.responseText); 
            }
        }
        xhr.onloadend = () => {
            if (xhr.status != 200) {
                let myError = {    // 억지로 
                    status: xhr.status,
                    message: xhr.statusText
                };
            }
        };
        
        xhr.send(JSON.stringify({data:"data"}));

 

 

 

Ajax get방식 보낼때

	$.ajax({
		contentType : "application/json;charset=utf-8", //charset=utf-8생략가능
		url : "/resp/goHome030105?Id=99",
		dataType : "text"
		type : "get",
		success : function(result){
			console.log('통신결과');
			console.log(result);
		}
	})

 

Ajax get방식 Controller로  받을때

	@GetMapping("/resp/goHome030105")
	public String GetMapping(@RequestParam int Id) {
		log.info("GetMapping호출");
		log.info("Id : " + Id); //결과 99
		return "Get Mapping DataType String";
	}

 

-컨트롤러에서 메소드의 리턴이 String이면 dataType옵션을 text로 해야한다. dataType을 json으로 하면 아무것도 받지 못한다.

-없는 파라미터를 get로 보내면 400에러가 발생한다.

그럴땐 이렇게 @RequestParam 에 ()안에

required = false로 설정해주고 defaultValue를 설정해주면 값이 없을 때 설정값으로 들어가 오류를 피할 수 있다.

	//요청방식URI : /resp/goHome030102?bookId=1
	//요청방식 : get
	//BookBo{bookId=1, title=검은태양, category=드라마...}
	//골뱅이ResponseBody : VO -> JSON 으로 응답
	@ResponseBody
	@GetMapping("/goHome030102")
	public BookVO home030102(
			@RequestParam(value="bookId", required = false, defaultValue = "1") int bookId,
			BookVO bookVO) {
		log.info("bookId : " + bookId);
		log.info("bookVO : " + bookVO);
		
		bookVO.setBookId(bookId);
		
		bookVO = this.bookService.detail(bookVO);
		
		return bookVO;
	}

application/json; charset=UTF-8에서 charset=UTF-8 생략이 가능하다.

 

 

 

 

 

2. @RequestBody 안쓰고 Vo로 값 받기(FormData type Vo)

type : post,

dataType : text,

contentType : application/x-www-form-urlencoded; charset=utf-8;

-데이터를 body에 담아서 보냄

post방식으로 @RequestBody 안쓰고  Ajax로보낼때

		$.ajax({
			type : "post",
			url : "/resp/goHome030103",
			data : {"no":"1","id" : "minwoo"},
			contentType : "applicatoin/x-www-form-urlencoded; charset=utf-8", //charset+utf-8 생략가능
			//contentType옵션 생략시 기본이 application/x-www-form-urlencoded; charset=utf-8
			dataType:"text",
			success : function(result){
				console.log("통신결과");
				console.log(result);
			}
			
		})

@RequestBody안쓰고  Controller에서 받을때

	@PostMapping("/post/goHome030103")
	public String PostMappingTest(VO vo) { //@RequestBody 삭제
		log.info("Vo : " + vo.toString());
		//출력결과 [no=1, Id=minwoo]
		return "Post Mapping DataType String";
	}

-ajax에서 폼데이터(FormData)를 vo로 보내려면 contentType을 생략하거나 contentType에 application/x-www-form-urlencoded; charset=utf-8을 지정해야 한다.

-FormData를 보낼때 사용하고 FormData는 json이 아니기 때문에 @RequestBody를 삭제한다.

 

 

 

 

3.@RequestBody 쓰고 Vo로 값 받기(Json type Vo)

type : post,

dataType : text,

contentType: application/json; charset=utf-8

ajax post의 정석

		let bookId = $("input[name='bookId']").val();
		let data = {"bookId":bookId};
		
		$.ajax({
			url:"/resp/goHome030103",
			contentType:"application/json;charset=utf-8",
			data:JSON.stringify(data),
			type:"post",
			dataTyep:"json",
			success:function(result){
				console.log("통신결과")
				console.log("result : ",result)
				
				$("textarea[name='content']").val(result.content);
			},
                        error: function(xhr, status, error) {
                            	 console.log(xhr, status, error)
                        }
		})

@RequestBody사용해서 데이터 받을 때

	//골뱅이 RequestBody : json{"bookId" : "1"} -> bookVO{bookId :1,title:null,...}
	//골뱅이 ResponseBody : bookVO{bookId :1,title:null,...} -> json{"bookId" :1,"title":null,...}
	@ResponseBody
	@PostMapping("/goHome030103")
	public BookVO home030103(
			@RequestBody BookVO bookVO) {
		log.info("bookVO : " + bookVO);
		
		bookVO = this.bookService.detail(bookVO);
		
		return bookVO;
	}

 

'Spring > Spring 기초' 카테고리의 다른 글

AOP log(횡단관심사)  (0) 2023.08.11
hibernate 라이브러리  (0) 2023.08.09
파일 업로드 서비스impl코드  (0) 2023.08.02
e7e샘의 파일 업로드 연습  (0) 2023.08.01
보충수업 Boomerang(부메랑)  (0) 2023.07.28