ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • AJAX parameter 타입 별 처리 방법
    JS 2023. 2. 13. 16:09

     

    POST

     

    1. String, int, boolean 등 단일 변수를 전송할 때

     

    $.ajax({
        type: 'POST', 
        async: true,
        url: "url주소",
        data: {test: "test"},
        success: function(response) {
            alert(response.data);
        }, 
        error: function(error) {
            console.log(error);
        }
    })
    @ResponseBody
    @RequestMapping(value = "/{workspace}/system/control/testMethod", method = RequestMethod.POST, produces = "application/json;charset=utf8")
    public String testMethod(String test)
        {
        try {
            return test;
        } catch (Exception e) {
            e.printStackTrace();
            return "false";
        }
    }

     

    간단하게 파라미터로 변수를 받아주면 끝 

     

     

    2. 여러 변수들을 받을 때 

     

    2-1)  따로 따로 받기

    $.ajax({
        type: 'POST', 
        url: "url 주소",
        data: {fruit: "grape", box: 2, order: true},
        datatype: "text",
        success: function(response) {
            alert(response)
        }, 
        error: function(error) {
            console.log(error);
        }
    })
    @ResponseBody
    @RequestMapping(value = "url 주소", method = RequestMethod.POST)
    public String testMethod(@RequestParam String fruit,
    		@RequestParam int box, @RequestParam boolean order){
        try {
            String result  = fruit + box;
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            return "false";
        }
    }

    보낼 때 datatype를 "text"로 설정했기 때문에 

    java 메소드에서  produces = "application/json;charset=utf8" 도 삭제해줘야 에러없이 동작한다.

     

     

    2-2) Map으로 받기

    $.ajax({
        type: 'POST', 
        url: "url 주소",
        data: {fruit: "grape", box: 2, order: true},
        success: function(response) {
            alert(response)
        }, 
        error: function(error) {
            console.log(error);
        }
    })
    @ResponseBody
    @RequestMapping(value = "url 주소", method = RequestMethod.POST) // , produces = "application/json;charset=utf8"
    public String testMethod(@RequestParam Map<String, Object> map)
        {
        try {
            String result = (String)map.get("fruit") + Integer.parseInt(map.get("box").toString()) + 
            		" : " + Boolean.parseBoolean(map.get("order").toString());
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            return "false";
        }
    }

    Map<String, Object> 형태로 가지고 오면 Object형을 형변환 해주는게 좀 일이다 

     

    2-3) VO로 받기

    public class parameterVO {
    	String fruit;
    	int box;
    	boolean order;
    	
    	public String getFruit() {
    		return fruit;
    	}
    	public void setFruit(String fruit) {
    		this.fruit = fruit;
    	}
    	public int getBox() {
    		return box;
    	}
    	public void setBox(int box) {
    		this.box = box;
    	}
    	public boolean isOrder() {
    		return order;
    	}
    	public void setOrder(boolean order) {
    		this.order = order;
    	}
    }
    $.ajax({
        type: 'POST', 
        url: 'url 주소',
        data: {fruit: "grape", box: 2, order: true},
        success: function(response) {
            alert(response)
        }, 
        error: function(error) {
            console.log(error);
        }
    })
    @ResponseBody
    @RequestMapping(value = "url 주소", method = RequestMethod.POST) // , produces = "application/json;charset=utf8"
    public String testMethod(ParameterVO pvo)
        {
        try {
            String result = "ParameterVO ! " + pvo.getFruit() + pvo.getBox() + " : " + pvo.isOrder();
            return result;
            //return fruit + box + " : " + order;
        } catch (Exception e) {
            e.printStackTrace();
            return "false";
        }
    }

     

    @RequestBody : http request body의 json value를 자바 객체와 바인딩 해준다

    (HttpMessageConverter : 자바 객체와 관련된 http 리퀘스트 메시지를 변환) 

    -> @RequestBody 어노테이션을 쓸 때는 JSON, 쓰지 않을 땐 x-www-form-urlencoded 방식으로 파라미터를 리퀘스트할 것!
    @RequestParam : 리퀘스트 파라미터와 메소드 파라미터를 바인딩 해준다

     

    @RequestBody를 같은 메소드에서 2번 사용할 수 없다 

    public String testMethod(@RequestBody ParameterVO pvo, @RequestBody parameterVO2 pvo2)

    처럼 사용할수 X

     

     

     

     

    댓글

Designed by Tistory.