使用带有Jersey和jQuery的FormParams

时间:2016-05-13 19:09:59

标签: javascript jquery ajax java-ee jersey

似乎这是一个经常被问到的不经常回答的问题。文档有点含糊不清。

我想发布一组参数,如下所述。 网络服务:

@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Response post(@FormParam("param") String param){
    // code..
}

的javascript:

//var paramData = {"startDate":$("#startDate").val()};
var paramData = {startDate:$("#startDate").val()};
$.ajax({
    type : 'POST',
    url : 'mysite.com/post',
    data: paramData,
    contentType: 'application/x-www-form-urlencoded',
    processData: false,
});

我已将contentType更改为false,尝试序列化和字符串化参数数据等。要么参数在服务中以null形式出现,要么返回不支持的媒体类型HTTP错误代码。

1 个答案:

答案 0 :(得分:1)

你做错了......

1。默认情况下,您的update将为contentType,因此无需指定。

2。您为什么使用application/x-www-form-urlencoded?你应该从这里阅读文档:

http://api.jquery.com/jQuery.ajax/

  

processData(默认值:true)

     

类型:布尔值

     

默认情况下,传入的数据   作为对象的数据选项(从技术上讲,除了一个以外的任何东西)   string)将被处理并转换为查询字符串,拟合   到默认的内容类型" application / x-www-form-urlencoded"。如果   要发送DOMDocument或其他未处理的数据,请设置此项   选项为false。

3。由于processData: false默认为processData,您不需要true,因此不需要false指定它。

4。您只是将Object作为data传递,但您在哪里指定了param,因为那是您的名字用于你的方法?看看:public Response post(@FormParam("param") String param)

5。由于paramString,您需要将Object转换为queryString (与如果我们正在序列化表单并且您可以使用jQuery轻松完成,则应阅读以下内容:http://api.jquery.com/jquery.param/

6。因此,最后您的代码必须如下所示:

var data = {
    name: 'Oscar',
    lastname: 'Jara'
};

$.ajax({
    type: 'POST',
    url: 'rest/service',
    data: {
        param: $.param(data)
    }
});

7。现在,如果您在param服务中打印REST变量所包含的内容,您将获得此信息:

name=Oscar&lastname=Jara