programing

브라우저의 Javascript에서 Ajax를 사용하여 spring mvc 컨트롤러로 어레이 데이터 전달

muds 2023. 7. 25. 21:21
반응형

브라우저의 Javascript에서 Ajax를 사용하여 spring mvc 컨트롤러로 어레이 데이터 전달

웹 브라우저의 Javascript에서 AJAX를 사용하여 Spring MVC 컨트롤러로 배열을 전달하고 싶습니다.

자바스크립트에서, 나는.

var a = [];
a[0] = 1;
a[1] = 2;
a[2] = 3;

// how about multiple arrays as well?

$.ajax({
    type : "POST",
    url : "/myurl",
    data : //not sure how to write this, ("a="+a), ?
    success : function(response) {
       // do something ... 
    },
    error : function(e) {
       alert('Error: ' + e);
    }
}); 

자바에서는 AJAX에서 데이터를 받을 클래스를 만들고 싶고, 데이터를 받을 클래스를 만듭니다.

package com.amazon.infratool.ui;

import lombok.Getter;
import lombok.Setter;


@Setter @Getter
public class RepairInfomationParameters {
//how to write this variable?
    List<String> a = null; // is it something like this?
}

이를 위한 올바른 방법은 무엇입니까?감사합니다!

JavaScript 쪽에서 이 작업을 수행할 수 있습니다.

$.ajax({
    type : "POST",
    url : "/myurl",
    data : {
        myArray: a //notice that "myArray" matches the value for @RequestParam
                   //on the Java side
    },
    success : function(response) {
       // do something ... 
    },
    error : function(e) {
       alert('Error: ' + e);
    }
}); 

그리고 자바 측(스프링 3)에서는 이 방법이 다음과 같이 매핑된다고 가정합니다./myurl:

public String controllerMethod(@RequestParam(value="myArray[]") Integer[] myArray){
    ....
}

저는 다음과 같은 것들도 효과가 있을 것이라고 믿습니다.

public String controllerMethod(@RequestParam(value="myArray[]") List<Integer> myArray){
    ....
}

스프링은 제본하는 방법을 알아낼 수 있을 정도로 똑똑합니다.

여러 어레이의 경우 다음 명령 개체를 사용할 수 있습니다.

public class MyData {
    private List<Integer> firstArray;
    private List<Integer> secondArray;
    private List<Integer> thirdArray;

    ...
    ...
}

그러면 JavaScript 쪽에서 다음을 수행합니다.

$.ajax({
    type : "POST",
    url : "/myurl",
    data : {            
        myData: {
           "firstArray": firstArray,
           "secondArray": secondArray,
           "thirdArray": thirdArray
        }            
    },
    success : function(response) {
       // do something ... 
    },
    error : function(e) {
       alert('Error: ' + e);
    }
}); 

Java 측에서는 다음을 사용하여 바인딩할 수 있습니다.@ModelAttribute:

public String controllerMethod(@ModelAttribute(value="myData") MyData myData) throws ParseException {
    ....
}

편집

변경 내용@RequestParam사용할 주석myArray[]의 대신에myArray이 답변이 처음 게시된 후 봄에 이 변경이 이루어진 것으로 보이기 때문입니다.

데이터가 문자열에서 구문 분석된다는 점을 염두에 두고 Spring MVC 컨트롤러에 이러한 데이터를 전달하는 것은 매우 간단합니다.따라서 컨트롤러에서 어레이/목록을 가져오려면 어레이의 문자열화된 버전을 전달합니다.

public String method(
        @RequestParam(value = "stringParam") String stringParam,
        @RequestParam(value = "arrayParam") List<String> arrayParam) {
    ...
}

jQuery를 사용하는 해당 Javascript는 다음과 같습니다.

$.post("/urlToControllerMethod",
    {
        "stringParam" : "test",
        "arrayParam" : [1, 2, 3, "test"].toString()
    }
);

참고: 매개 변수 유형

List<String> arrayParam

어레이 등가물로 대체할 수도 있습니다.

String[] arrayParam

비빈 팔리아스는 당신이 사용하지 않는 한 작동하지 않습니다.myArray[]

public String controllerMethod(@RequestParam(value="myArray[]") Integer[] myArray){
    ...
}

만약 당신이 스프링 mvc 4를 사용한다면 아래가 가장 좋은 접근법이 될 것입니다.

제이쿼리 코드

var dataArrayToSend = []; dataArrayToSend.push("a"); dataArrayToSend.push("b"); dataArrayToSend.push("c");

아약스 코드

$.ajax({ contentType: "application/json", type: "POST", data: JSON.stringify(dataArrayToSend), url: "/appUrl", success: function(data) { console.log('done'); }, error: function(jqXHR, textStatus, errorThrown) { console.log('error while post'); }
});

스프링 컨트롤러 코드

@RequestMapping(value = "/appUrl", method = RequestMethod.POST) public @ResponseBody void yourMethod(@RequestBody String[] dataArrayToSend) { for (String data : dataArrayToSend) { System.out.println("Your Data =>" + data); } }

이것이 당신에게 도움이 되는지 아닌지 확인하세요!

건배!

완벽하게 테스트된 솔루션

$.ajax({
    type : "POST",
    url : "/myurl",
    data : {
        myArray: a //notice that "myArray" matches the value for @RequestParam
                   //on the Java side
    },
    success : function(response) {
       // do something ... 
    },
    error : function(e) {
       alert('Error: ' + e);
    }
}); 

@RequestMapping(value = "/save/", method = RequestMethod.POST)
    public String controllerMethod(@RequestParam(value="myArray[]") List<Integer> myArray){
        System.out.println("My Array"+myArray.get(0));
        return "";
    }

저는 결국 이것을 하고 그것은 작동합니다.

Js 단위로,

var a = [];
a[0] = 1;
a[1] = 2;
a[2] = 3;


$.ajax({
    type : "POST",
    url : "/myurl",
    data : "a="+a,  //multiple array, just add something like "&b="+b ...
    success : function(response) {
       // do something ... 
    },
    error : function(e) {
       alert('Error: ' + e);
    }
}); 

java 측, 데이터를 수신할 클래스 가져오기, lombok

@Setter @Getter 공용 클래스 MyData {privateArrayLista;
}

그 다음에 컨트롤러에서.

@RequestMapping(value = "/repair_info", method = RequestMethod.POST)
public ModelAndView myControl(MyData myData) {
    // get data with myData object
}

언급URL : https://stackoverflow.com/questions/17560258/pass-array-data-from-javascript-in-browser-to-spring-mvc-controller-using-ajax

반응형