【问题标题】:Post custom array in Javascript via Ajax to Spring Rest Service通过 Ajax 将 Javascript 中的自定义数组发布到 Spring Rest Service
【发布时间】:2016-01-14 10:41:32
【问题描述】:

我必须在 JQuery 中创建一个带有 AJAX 请求的 POST,我必须在其中传递一个可以创建的对象数组:

var actor=new Array();
for(var i=1;i<=incr;i++)
{
    actor.push({"name": document.getElementById("idAN"+i).value,
        "surname": document.getElementById("idAS"+i).value,
        "dateborn": document.getElementById("idAB"+i).value,
        "gender": document.getElementById("idAG"+i).value,
        "movie": datas});
    alert("actorX: "+actor[i-1].surname);
}
$.ajax({
    method:'POST',
    dataType: 'json',
    data:{ actors: actor },
    url:'http://localhost:8080/movies/actors',
        success: function (rest) {
                alert("aggiunto attore");
    },
    error: function(rest){
        alert("non aggiunto attore");
    }
});

我使用此 Java 方法接收数据,但这不起作用。谁能帮帮我?

@RequestMapping(value = "movies/actors", method = RequestMethod.POST)

public ArrayList<Actor> addActors(@RequestBody Actor[] actors) {...}

经过三天的工作,我在 cmets 的帮助下解决了这个问题。这是java中方法的结果:

@CrossOrigin(origins = "http://localhost:8080")
@RequestMapping(value = "movies/actors", method = RequestMethod.POST,headers="Accept=application/json")

public @ResponseBody ArrayList<Actor> add (@RequestBody Actor[] actors) {
    //Actor[] actors = actobj.getAllActors();
    ArrayList<Actor> json = new ArrayList<Actor>();
    for(Actor A : actors){
        System.out.println("Arrivo");
        serv.addActor(new Actor(A.getName(),A.getSurname(),A.getBorn(),A.getGender(),A.getMovie()));
        System.out.println("nomeAttore"+A.getName());
         json.add(A);
    }
    return json;
}

这是发布请求:

$.ajax({
    method:'POST',
    dataType: 'json',
    data:JSON.stringify(actor),
    contentType: "application/json; charset=utf-8",
    url:'http://localhost:8080/movies/actors',
    success: function (rest) {
         alert("aggiunto attore");
    },
    error: function(rest){
        alert("non aggiunto attore");
    }
});

特别是我把查询sql中的一个参数值从databorn改成了born,因为我有getBorn和setBorn方法,名字必须是eguals;而eguals必须是javascript中数组actor中对象参数的名称:born

【问题讨论】:

  • 你有什么错误吗?
  • 是的,我有错误 415,不支持的媒体类型
  • 查看thisthis 的答案

标签: javascript java ajax spring post


【解决方案1】:

你有任何错误吗?我认为问题可能是您没有将数据序列化为 JSON 格式,请尝试:

data:{ actors: JSON.stringify(actor) }

同时添加:

contentType: "application/json; charset=utf-8",

应该没问题。

编辑

试试

data: JSON.stringify(actor),

【讨论】:

  • 我已经尝试过这个解决方案,但它似乎不起作用,它给出了 400 个错误请求,我想可能是因为这些不是简单的对象(参与者)而是自定义对象
  • 检查编辑的答案
  • 我从控制台收到了这样的回复:
  • 预检响应包含无效的 HTTP 状态代码 403
  • 加载资源失败:服务器响应状态为 403 (Forbidden)
【解决方案2】:

换一个怎么样

@RequestMapping(value = "movies/actors", method = RequestMethod.POST)

@RequestMapping(value = "movies/actors", method = RequestMethod.POST,consumes = MediaType.APPLICATION_JSON_VALUE)

必须为此添加jackson依赖项,如果是maven项目,请尝试添加以下作为依赖项。

 <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.6.1</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.6.1</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.6.1</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.datatype</groupId>
      <artifactId>jackson-datatype-hibernate4</artifactId>
      <version>2.6.1</version>
    </dependency>

【讨论】:

  • 在 APPLICATION_JSON_VALUE 上,我有一个错误,我必须为它设置一个特定的依赖项?
  • 是的,将杰克逊依赖添加到 pom.xml(如果它是 maven 项目)。
  • 是的,我有 Maven 项目。我试过了,但我有同样的错误:APPLICATION_JSON_..无法解析或不是类型
  • 试试这个答案stackoverflow.com/questions/33647939/…的解决方案
猜你喜欢
  • 1970-01-01
  • 2016-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-16
  • 2021-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多