2

我的数据:

var test = {cars : []};

var cars = []
cars.push({
    "name" : "Ford",
    "year" : "2000"
});

    cars.push({
    "name" : "Audi",
    "year" : "2002"
});

test.cars = cars;   

var json = JSON.stringify(test);

$.get('/myservlet/', json, function(data) { // also tried .getJSON , .post
            alert('Success');                               
})

在 Java 中,我将“json”变量作为参数键,但没有值。

public void doPost(...) // TRIED BOTH
public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {           
    for(Object a : req.getParameterMap().keySet()) {
        System.out.println(a + " - " + req.getParameter((String)a));
    }
//prints out
{"cars":[{"name":"Ford","year":"30"},{"name":"Audi","year":"2002"}]} - 

这是无法使用的结果,因为密钥总是在变化,并且每次都循环参数是荒谬的。我需要一个特定的密钥:req.getParameter("cars")

4

3 回答 3

2

将其更改为:

$.get('/myservlet/', 'cars='+ json, function(data) { // also tried .getJSON , .post
        alert('Success');                   
于 2012-11-26T13:31:02.533 回答
0

您根本不应该对 JSON 进行字符串化。整个 JSON 对象test应该被视为请求参数映射。只需传递未修改的 JSON 对象。

$.get('/myservlet/', test, function(data) {
    // ...
});

这样它就可以在 servlet 中使用,如下所示:

for (int i = 0; i < Integer.MAX_VALUE; i++) {
    String name = request.getParameter("cars[" + i + "][name]");
    if (name == null) break;
    String year = request.getParameter("cars[" + i + "][year]");
    // ...
}
于 2012-11-26T15:12:36.660 回答
-1

更新 您的问题可能与 READ JSON String in servlet重复

上一个答案

我假设您正在尝试将 JSON 发布到 servlet,如果是这样的话,请继续阅读。

您必须检查请求正文而不是请求参数。就像是

BufferedReader buff = req.getReader();

检查这是否适合您

public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
  BufferedReader buff = req.getReader();
  char[] buf = new char[4 * 1024]; // 4 KB char buffer
  int len;
  while ((len = reader.read(buf, 0, buf.length)) != -1) {
   out.write(buf, 0, len);
  }
}

请注意,我已经检查了上面的代码是否存在语法错误。我希望你能明白。

于 2012-11-26T13:30:38.833 回答