【问题标题】:Passing list to a Spring Controller using Jquery Ajax使用 Jquery Ajax 将列表传递给 Spring Controller
【发布时间】:2017-12-26 17:42:54
【问题描述】:

我们的代码中有多个ModelBean 类。我们需要使用 AJAX 调用将不同分类的数据发送到 Main modelBean 类(如 listobjectstring 等)。我尝试了以下代码并且能够发送String 类型但不能发送listobject。从AJAX,我们需要发送到Spring controller。主 Bean 类是MainBean

public class MainBean {

private String name;
private List<Truck> truckList;
private Address address;

}
public class Address {
    private String houseNumber;
    private String area;
    private String city;
}

public class Truck {
    private String truckName;
    private Type type;
}

public class Type{
    private String medium;
    private String heavy;
}

控制器类

@RequestMapping(value="/saveData", method = RequestMethod.POST)
    public ModelAndView saveData(@ModelAttribute("mainBean")MainBean mainBean){

        truckService.saveData(mainBean);

        return new ModelAndView("redirect:/main");
    }

AJAX 代码

$( document ).ready(function() {

var url = window.location;

// SUBMIT FORM
$("#customerForm").submit(function(event) {
    // Prevent the form from submitting via the browser.
    event.preventDefault();
    ajaxPost();
});


function ajaxPost(){

    // PREPARE FORM DATA
    var formData = {
        firstname : $("#name").val(),
        truckName :  $("#truckName").val(),
        medium :  $("#medium").val(),
        heavy :  $("#heavy").val(),
        houseNumber :  $("#houseNumber").val()
    }

    // DO POST
    $.ajax({
        type : "POST",
        contentType : "application/json",
        url : url + "/postcustomer",
        data : JSON.stringify(formData),
        dataType : 'json',
        success : function(result) {
            if(result.status == "Done"){
                $("#postResultDiv").html("<strong>" + "Success" + "</strong>");
            }else{
                $("#postResultDiv").html("<strong>Error</strong>");
            }
            console.log(result);
        },
        error : function(e) {
            alert("Error!")
            console.log("ERROR: ", e);
        }
    });
}

})

【问题讨论】:

    标签: jquery ajax spring spring-mvc spring-boot


    【解决方案1】:

    您需要将数据作为字符串发送到控制器,一旦您将数据输入控制器,您就可以将其解析为列表,或者您想要的任何类型:

    @RequestMapping(value="/saveData", method = RequestMethod.POST)
    public ModelAndView saveData(@ModelAttribute("mainBean")String mainBeanString){
    
    
        ObjectMapper mapper = new ObjectMapper();
        List<MainBean> itemsFromController = mapper.readValue(mainBeanString, mapper.getTypeFactory().constructCollectionType(List.class, MainBean.class));
        truckService.saveData(itemsFromController);
    
        return new ModelAndView("redirect:/main");
    }
    

    ObjectMapper来自杰克逊库

    import com.fasterxml.jackson.databind.ObjectMapper;
    

    [编辑]:

    创建您在 java 中创建的相同模型:

    var mainBean = {
        name: "",
        truckList: [],
        address: {}
    }
    

    那么你可以像这样传递值:

    mainBean.address.houseNumber = $("#houseNumber").val();
    

    一旦您在 Javascript 中创建了模型,您就可以将其放入 ajax 调用中

    data : JSON.stringify(mainBean)
    

    【讨论】:

    • 如果我有一份清单,那就没问题了。查看我的 MainBean 类及其相关的其他 bean 类。对于 EX:如何将值发送到地址?
    • MainBean.Adress adress = new MainBean.Adress(),确保你已经为你的内部类定义了getter和setter,然后是adress.setArea("51");
    • MainBean.Adress adress = new MainBean.Adress().. 不起作用。我也尝试过你的建议。另请注意,我从 AJAX 获取值(如果可能,请更新上面的代码)。
    猜你喜欢
    • 2018-09-01
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    相关资源
    最近更新 更多