将FormParams与Jersey和jQuery一起使用

Using FormParams with Jersey and jQuery

本文关键字:一起 jQuery FormParams Jersey      更新时间:2023-09-26

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

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

@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。默认情况下,您的contentType将是application/x-www-form-urlencoded,因此无需指定。

2.为什么要使用processData: false?你应该从这里阅读文档:

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

processData(默认值:true)

类型:布尔

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

3。由于默认情况下processDatatrue,您不需要它是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.现在,如果您在REST服务中打印param变量包含的内容,您将得到以下内容:

name=Oscar&lastname=Jara