Javascript 如何使用Ajax调用将列表传递给Spring MVC控制器
我的持有对象如下:Javascript 如何使用Ajax调用将列表传递给Spring MVC控制器,javascript,ajax,spring-mvc,Javascript,Ajax,Spring Mvc,我的持有对象如下: public class Transfer implements Serializable { private Integer transferId; private Integer transferTypeId; private String storeId; private String userId; private Integer titleId; private Integer statusId;
public class Transfer implements Serializable {
private Integer transferId;
private Integer transferTypeId;
private String storeId;
private String userId;
private Integer titleId;
private Integer statusId;
private String inWorkerId;
private String outWorkerId;
private Date createDt;
private Date updateDt;
// getters & setts
}
我有varreqRow
,需要发送给控制器
function onClickSave(){
var rows = $('#transferEditGrid').jqGrid('getRowData');
var reqRow = [];
for (i = 0; i < rows.length; i++)
{
var rowObj = {};
rowObj.storeId = rows[i].storeId;
rowObj.inWorkerId = rows[i].inWorkerId;
rowObj.outWorkerId = rows[i].outWorkerId;
rowObj.transferTypeId = rows[i].transferTypeId;
rowObj.statusId = rows[i].statusId;
rowObj.storeId = rows[i].storeId;
reqRow.push(rowObj);
}
//send reqRow to the Controller
$.ajax({
type:'POST',
url:'${contextPath}/resource-transfer/update.do',
dataType:"json",
data : {rows : reqRow},
//data:JSON.stringify(reqRow),
success:function(response){
alert("success");
}
});
}
函数onClickSave(){
var rows=$('#transferditgrid').jqGrid('getRowData');
var reqRow=[];
对于(i=0;i
控制器如下所示:
@RequestMapping(value = "/update", method = { RequestMethod.GET, RequestMethod.POST }, produces = "application/json; charset=utf-8")
@ResponseBody
public String transferUpdate(@RequestBody List<Transfer> rows) throws JSONException, InterruptedException {
System.out.println("in transfer update section");
return null;
}
@RequestMapping(value=“/update”,method={RequestMethod.GET,RequestMethod.POST},products=“application/json;charset=utf-8”)
@应答器
公共字符串transferUpdate(@RequestBody List rows)抛出JSONException、InterruptedException{
System.out.println(“在传输更新部分”);
返回null;
}
为什么我不能将数组对象传递给控制器?
我是否误解了Ajax调用的用法
多谢各位
public class TransferDTO {
private List<Transfer> rows;
// getter & setter
}
公共类传输到{
私有列表行;
//吸气剂和塞特
}
列表
中使用此选项publicstringtransferupdate(@RequestBody TransferDTO data)
contentType
contentType:'application/json'
data:JSON.stringify({rows:reqRow})
Java代码
@Controller
public class ContractController {
@RequestMapping(value="all/contract/change/detail", method = RequestMethod.POST, produces=MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
@ResponseStatus(HttpStatus.OK)
public List<ContractAndBidReceiveChangeDetailModel> getAllContractAndBidReceiveChangeDetail(@RequestBody List<ContractReceivedChangedActivityCodesModel> allChangedActivityCodesModel) {
List<ContractAndBidReceiveChangeDetailModel> allContractAndBidChangeDetails = null;
if (CollectionUtils.isNotEmpty(allChangedActivityCodesModel)) {
allContractAndBidChangeDetails = allChangedActivityCodesModel
.stream()
.map(this::getContractAndBidReceiveChangeDetail)
.collect(Collectors.toList());
}
return allContractAndBidChangeDetails;
}
} // end of controller class
@JsonAutoDetect(
creatorVisibility = JsonAutoDetect.Visibility.NONE,
fieldVisibility = JsonAutoDetect.Visibility.NONE,
getterVisibility = JsonAutoDetect.Visibility.NONE,
isGetterVisibility = JsonAutoDetect.Visibility.NONE,
setterVisibility = JsonAutoDetect.Visibility.NONE
)
public class ContractReceivedChangedActivityCodesModel {
private String rowId;
private Long bidId;
private Long planId;
private Long optionCodeId;
private Long activityCodeId;
private Long activityPackageId;
private String activityCodeNoAndName;
private String planName;
// constructors
@JsonProperty
public String getRowId() {
return rowId;
}
public void setRowId(String rowId) {
this.rowId = rowId;
}
//others getters and setters
}
@控制器
公共类控制器{
@RequestMapping(value=“all/contract/change/detail”,method=RequestMethod.POST,products=MediaType.APPLICATION\u JSON\u value)
@应答器
@ResponseStatus(HttpStatus.OK)
公共列表getAllContractAndBidReceiveChangeDetail(@RequestBody List AllChangedActivityCodes模型){
列出所有ContractAndBidChangeDetails=null;
if(CollectionUtils.isNotEmpty(allChangedActivityCodesModel)){
allContractAndBidChangeDetails=allChangedActivityCodesModel
.stream()
.map(此::getContractAndBidReceiveChangeDetail)
.collect(Collectors.toList());
}
返回所有ContractandBidChangeDetails;
}
}//控制器类结束
@JsonAutoDetect(
creatorVisibility=jsonautodect.Visibility.NONE,
fieldVisibility=jsonautodect.Visibility.NONE,
GettServiceability=jsonautodect.Visibility.NONE,
IsGettServiceability=jsonautodect.Visibility.NONE,
setterVisibility=jsonautodect.Visibility.NONE
)
公共类ContractReceivedChangedActivityCodes模型{
私有字符串rowId;
私人长柄;
私人长平面;
私人长期权;
私有长活动代码;
私有长活动包ID;
私有字符串activityCodeNoAndName;
私有字符串名称;
//建设者
@JsonProperty
公共字符串getRowId(){
返回rowId;
}
public void setRowId(字符串rowId){
this.rowId=rowId;
}
//其他人则是能手和二传手
}
JQuery代码。确保您所做的json请求与spring所期望的相同。Spring会自动将这个json映射到您的java列表
function getDetailRow(url, requestData, $caret, action) {
$spinner.show();
$.ajax({
url: url,
data : requestData,
dataType: "json",
type: "POST",
contentType: "application/json",
success: function(response) {
if (!$.isEmptyObject(response)) {
switch(action){
case "expandLink":
insertDetailRow($caret, response);
break;
case "expandAllLinks":
$.each(response, function(index, changeDetailResponse) {
var caretId = changeDetailResponse.rowId;
let $caret = $('#' + caretId);
insertDetailRow($caret, changeDetailResponse);
});
break;
}
}
$spinner.hide();
}, error: function(xhr, status, error){
$spinner.hide();
if (xhr.status == 500) {
var errorResponse = xhr.responseText;
if (errorResponse) {
alert(errorResponse);
}
}
}
});
}
function getRequestJson(requestObject) {
let requestJson = null;
if (requestObject != null) {
requestJson = JSON.stringify(requestObject);
}
return requestJson;
}
function getRequestObject($caret) {
let requestObject = null;
if ($caret.length > 0) {
let rowId = $caret.attr("id");
let bidId = $caret.attr("bidId");
let planId = $caret.attr("planId");
let optionCodeId = $caret.attr("optionCodeId");
let activityCodeId = $caret.attr("activityCodeId");
let activityPackageId = $caret.attr("activityPackageId");
requestObject = new Object();
requestObject.rowId = rowId;
requestObject.bidId = bidId;
requestObject.planId = planId;
requestObject.optionCodeId = optionCodeId;
requestObject.activityCodeId = activityCodeId;
requestObject.activityPackageId = activityPackageId;
}
return requestObject;
}
let caretsWithoutDetailRow = new Array();
let requestObjects = null;
// process caretsWithoutDetailRow Array with some logic so it contains some elements
if (caretsWithoutDetailRow.length > 0) {
requestObjects = new Array();
$.each(caretsWithoutDetailRow, function(index, $caret) {
let requestObject = getRequestObject($caret);
requestObjects.push(requestObject);
});
}
if (requestObjects != null && requestObjects.length > 0) {
let requestObjectsJson = getRequestJson(requestObjects);
let url = '<c:url value = "/all/contract/change/detail"/>';
getDetailRow(url, requestObjectsJson, null, 'expandAllLinks');
}
函数getDetailRow(url、requestData、$caret、action){
$spinner.show();
$.ajax({
url:url,
数据:请求数据,
数据类型:“json”,
类型:“POST”,
contentType:“应用程序/json”,
成功:功能(响应){
如果(!$.isEmptyObject(响应)){
开关(动作){
案例“expandLink”:
insertDetailRow($caret,response);
打破
案例“expandAllLinks”:
$.each(响应、函数(索引、changeDetailResponse){
var caretId=changetailresponse.rowId;
设$caret=$('#'+caretId);
insertDetailRow($caret,changeDetailResponse);
});
打破
}
}
$spinner.hide();
},错误:函数(xhr,状态,错误){
$spinner.hide();
如果(xhr.status==500){
var errorResponse=xhr.responseText;
如果(错误响应){
警报(错误响应);
}
}
}
});
}
函数getRequestJson(requestObject){
让requestJson=null;
if(requestObject!=null){
requestJson=JSON.stringify(requestObject);
}
返回请求JSON;
}
函数getRequestObject($caret){
让requestObject=null;
如果($caret.length>0){
设rowId=$caret.attr(“id”);
设bidId=$caret.attr(“bidId”);
设planId=$caret.attr(“planId”);
让optionCodeId=$caret.attr(“optionCodeId”);
让activityCodeId=$caret.attr(“activityCodeId”);
让activityPackageId=$caret.attr(“activityPackageId”);
requestObject=新对象();
requestObject.rowId=rowId;
requestObject.bidId=bidId;
requestObject.planId=planId;
requestObject.optionCodeId=optionCodeId;
requestObject.activityCodeId=activityCodeId;
requestObject.activityPackageId=activityPackageId;
}
返回请求对象;
}
let caretsWithoutDetailRow=新数组();
让requestObjects=null;
//p