将数组从javascript发送到Spring控制器

将数组从javascript发送到Spring控制器,javascript,spring,Javascript,Spring,我有一个javascript函数,可以向控制器API发送帖子。代码如下: exports.importList = function (req, res) { res.setHeader('Content-Type', 'application/json'); var agencyId = req.user.agency_id; var userId = req.user.id; data = { id_list: req.body.ids, remoteHost:'127.0.0.1', u

我有一个javascript函数,可以向控制器API发送帖子。代码如下:

exports.importList = function (req, res) {
res.setHeader('Content-Type', 'application/json');
var agencyId = req.user.agency_id;
var userId = req.user.id;
 data = {
id_list: req.body.ids,
remoteHost:'127.0.0.1',
userId : userId,
agencyId:agencyId
};

call = '/ilist/importer/list/'; //Spring route

fetcher.post(call, 'post', data, function (err, result) {
    console.log(data);
})
}

req.body.ids
是一个字符串值数组,因此我要发送到控制器的数据具有以下结构:

{ id_list: [ '2147041', '2155271' ], 
  remoteHost: '127.0.0.1', 
  userId: 'user', 
  agencyId: 1 }
我的控制器方法:

@RequestMapping(value="/list/", method = RequestMethod.POST, headers = "Accept=application/json")
public @ResponseBody RemaxResponse importPropertyList(@RequestBody ArrayList<String> data )  {

    List<Long> ids = new ArrayList<>();
    for (String id : data.id_list) {
        ids.add(Long.valueOf(id));
   }

       response = ilistIImporterService.importPropertyList(ids);
    return response;
}
@RequestMapping(value=“/list/”,method=RequestMethod.POST,headers=“Accept=application/json”)
public@ResponseBody RemaxResponse importPropertyList(@RequestBody ArrayList data){
列表ID=新的ArrayList();
for(字符串id:data.id\u列表){
id.add(Long.valueOf(id));
}
response=ilistIImporterService.importPropertyList(ids);
返回响应;
}
我需要在我的控制器中获取字符串数组并将其存储在整数数组中,其他参数存储在整数变量中。
现在,我发现我从javascript发送的数据实际上是不正确的。这样做的正确方法是什么?

如果您想发送整个对象,我会创建一个pojo并将其用作
@RequestBody
类似的

public @ResponseBody RemaxResponse importPropertyList(@RequestBody RequestObject data )  {
现在spring可以很好地将整个数据解析到给定的pojo,您只需使用
getter
即可获得所需的数据

pojo可能看起来像

public class RequestObject {
    private List<Long> idList = null;
    private String remoteHost;
    private String userId;
    private Integer agencyId;

    public List<Long> getIdList() {
        return idList;
    }

    public void setIdList(List<Long> idList) {
        this.idList = idList;
    }

    public String getRemoteHost() {
        return remoteHost;
    }

    public void setRemoteHost(String remoteHost) {
        this.remoteHost = remoteHost;
    }

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public Integer getAgencyId() {
        return agencyId;
    }

    public void setAgencyId(Integer agencyId) {
        this.agencyId = agencyId;
    }
}
公共类请求对象{
私有列表idList=null;
私有字符串远程主机;
私有字符串用户标识;
私有整数代理ID;
公共列表getIdList(){
返回懒汉;
}
public void setIdList(列表idList){
this.idList=idList;
}
公共字符串getRemoteHost(){
返回远程主机;
}
public void setRemoteHost(字符串remoteHost){
this.remoteHost=remoteHost;
}
公共字符串getUserId(){
返回用户标识;
}
public void setUserId(字符串userId){
this.userId=userId;
}
公共整数getAgencyId(){
返回代理ID;
}
public void setAgencyId(整数agencyId){
this.agencyId=agencyId;
}
}

req.body.ids
是一个对象,
req.body.ids.id\u list
是一个数组,不是吗?您也不需要使用
@RequestBody List
,如果您直接使用
@RequestBody List
,spring应该正确解析它,但是数据中的其他键呢,比如:userId,。。。?我怎样才能得到它们呢?我很感激,但是没有其他方法可以做到这一点,我认为这是对代码的浪费,因为我不再使用它了,就在这种情况下……你也可以使用
映射
作为
@RequestBody
——但是你需要将所有内容解析为正确的类型。更干净的方法是pojo,不过地图的书写速度会更快@亚内特佩德拉扎