본문 바로가기
개발/Spring

[SpringBoot] Ajax 통신으로 json 주고 받기

by 코딩하는 흰둥이 2024. 7. 4.

매번 잘 사용하면서도 잠깐 안 쓰다 보면 잊어버리길래 정리를 해보려 한다.

 

Ajax 를 사용하려면 jQuery를 사용해야 한다.

<script  src="https://code.jquery.com/jquery-3.7.1.js"
  integrity="sha256-eKhayi8LEQwp4NKxN+CfCh+3qOVUtJn3QNZ0TciWLP4="
  crossorigin="anonymous"></script>

Jquery 사이트에서 복사해 오면 된다 https://releases.jquery.com/

html 또는 jsp 의 <head>태그 안에 넣고 사용하자!

 

 

 

Ajax 구조
    $.ajax({
        url : "",                   // 이동 경로
        type : "",                  // 대소문자 가리지 않음 - GET , POST , PUT , DELETE
        async : true,               // 기본값은 true , true : 비동기 , false : 동기
        dataType : "",              // 서버로부터 받을 데이터 타입 - text , html , json, jsonp, and script
        contentType : "",           // 서버로 전달할 데이터 타입 설정하지 않았을때 기본값은 application/x-www-form-urlencoded; charset=utf-8 이다
        data : data,                // 전달할 데이터
        beforeSend : function (xhr) {
          // ajax 통신 전 실행
          // xhr.abort();  // ajax 중단
        },
        success : function (data){
            // 통신 성공
        },
        error(e){
            // 통신 실패
        },
        complete : function (){
            // ajax 통신 후 실행
        }
    });

 

 

 

JavaScript
function testGet() {
    let id = "111";
    let pw = "222";

    let ob = new Object();
    ob.id = id;
    ob.pw = pw;

    $.ajax({
        url : "/testtest/testtestGet",
        type : "GET",
        // contentType                     // GET 에서는 body 사용을 권장하지 않는다
        dataType : "json",                 // json으로 받겠다
        // data : {"id" : id , "pw" : pw}, // 데이터 전달 기본 형식
        data : ob,
        success : function (data){
            if(data != null){
            // {object : Object} 로 넘어오기 때문에 json 으로 변환
                console.log("Get data : " + JSON.stringify(data));
            }
        },
        error(e){
            console.log("error : "+ e);
        }
    })
}

function testPost() {
    let id = "111";
    let pw = "222";

    let ob = new Object();
    ob.id = id;
    ob.pw = pw;

    $.ajax({
        url : "/testtest/testtestPost",
        type : "POST",
        dataType : "json",                              // json으로 받겠다
        contentType : "application/json; charset=utf-8",// json으로 전달하겠다
        // data : {"id" : id , "pw" : pw},              // 데이터 전달 기본 형식
        data : JSON.stringify(ob),                      // json으로 변환
        success : function (data){
            if(data != null){
            // {object : Object} 로 넘어오기 때문에 json 으로 변환
                console.log("Post data : " + JSON.stringify(data));
            }
        },
        error(e){
            console.log("error : "+ e);
        }
    })
}

 

Controller
import org.json.simple.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

@Controller
@RequestMapping("/testtest/*")
public class testController {

    @GetMapping("/testtestGet")
    @ResponseBody // json 으로 전달하려면 꼭 들어가야함
    public String testtestGet(@RequestParam Map<String , Object> map) throws Exception{
        // @RequestParam Map<String , Object> map 은 vo가 있다면 vo로 받아도 된다.
        System.err.println("Get : "+ map.toString());

        // 서버를 정상적으로 갔다왔는지 확인하기 위한 추가 데이터
        map.put("Get Test" , "TestGet");
        // json으로 변환
        JSONObject js = new JSONObject(map);

        return js.toString();
    }


    @PostMapping("/testtestPost")
    @ResponseBody // json 으로 전달하려면 꼭 들어가야함
    // @RequestParam 이 아닌 @RequestBody 다 , contentType 에 json 을 설정하였고 전달하는 data 또한 json으로 변환하여 보냈기 때문
    public String testtestPost(@RequestBody Map<String , Object> map) throws Exception{
        // @RequestBody Map<String , Object> map 은 vo가 있다면 vo로 받아도 된다.
        System.err.println("post : "+ map.toString());

        // 서버를 정상적으로 갔다왔는지 확인하기 위한 추가 데이터
        map.put("Post Test" , "TestPost");
        // json으로 변환
        JSONObject js = new JSONObject(map);

        return js.toString();
    }
}

 

 

서버로부터 받은 json 데이터

 

댓글