使用JSON将对象数组从jsp传递到java servlet

时间:2010-11-09 06:28:48

标签: jquery ajax json jsp servlets

以下代码是我想弄清楚的。希望你们能帮助我!

jsp:

<input name="test" type="text" /><br/>
<input name="test" type="text" /><br/>
<input name="test" type="text" /><br/>
<input id="query" type="button" value="query" onClick="doajax()"/>

js:

function doajax(){
    var dataSet = $("input[type='text'][name='test']").serializeArray();

    $.ajax({
            type: "post",
            url: "<%=request.getContextPath()%>/testJson",
            dataType: "json",
            data:dataSet,
            error:function(){   
                alert("error occured!!!");   
            },
            success:function(data){
                alert("success");
            }  
    });
}

* [更新] *

我正在使用Struts 2.0。 我通常通过“get and set”而不是request.getParameters()来获取参数。

如何在Java Servlet中获取dataSet

感谢您阅读!

3 个答案:

答案 0 :(得分:2)

你可以尝试这个例子来做对: -

首先通过jsp中的js文件中的getUserDetails()方法将名称和年龄传递给onclick事件

  function getUserDetails() {      
       var name = document.getElementById('name');      
       var age = document.getElementById('age');

       // alert("hi " + name.value);
   $.getJSON("../webresources/myresource",
           {
                    name: name.value,
                    age: age.value
                },
                function(json) {

                    alert("name is= "+json.name+ " and age is ="+json.age);

                });
   }

并且在servlet中它应该如下所示: -

public class MyResource {

  @GET
  @Produces("application/json; charset=UTF-8")
  public Response getIt(
        @QueryParam("name") String name,
        @QueryParam("age") String age) {

    Person person = new Person();
    person.setName(name);
    person.setAge(Integer.parseInt(age));

//  Person persons = personService.findPerson(person);
    String temp1 = person.getName();
    int temp = person.getAge();
    String temp2 = Integer.toString(temp);

    StringBuffer buffer = new StringBuffer();

    buffer.append(" { 'name':'");
    buffer.append(temp1);
    buffer.append(" ','age': ");
    buffer.append(temp2);
    buffer.append(" } ");
    String json = buffer.toString();

        // for example constructed string looks like
      // String json = "{'name':'ravi','age':21}";

    return Response.ok(json, MediaType.APPLICATION_JSON).build();

}

答案 1 :(得分:1)

dataSet是一个常规的POST参数,因此请以常规方式获取。

然后使用像Jacksongson这样的JSON库将JSON转换为对象。但是,您需要将结构定义为类。所以,如果你有一个DataSet类完全映射到你发送的json,你可以填充它(杰克逊):

ObjectMapper mapper = new ObjectMapper();
DataSet object = mapper.readValue(dataSet, DataSet.class);

然后,如果要发送一些JSON响应,请转换响应数据并将其写入response.getWriter(),或者如果库允许,则将输出直接写入writer。

例如,杰克逊有writeValue(writer, object)。所以在servlet中:

ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(response.getWriter(), yourData);

response.setContentType("application/json");

答案 2 :(得分:0)

使用request.getParameterMap()并显示所有请求参数。您可以在那里找到所需的参数。