从javascript向Rest传递对象

从javascript向Rest传递对象,java,javascript,jquery,rest,Java,Javascript,Jquery,Rest,下面是一个场景 我的REST服务定义如下: @Path("/company/{companyName}/sessions") public class RESTSessionController { RESTService service = new RESTService(); @GET @Produces({"application/json"}) @Path("/{username}/{password}") public Result

下面是一个场景 我的REST服务定义如下:

@Path("/company/{companyName}/sessions")
public class RESTSessionController {

    RESTService service = new RESTService();
     @GET
     @Produces({"application/json"})
     @Path("/{username}/{password}") 
     public Result getFriend(@PathParam ("companyName") String companyName ,
             @PathParam ("username") String username,
             @PathParam ("password") String password){

         System.out.println(companyName);
         return service.login(username,password);
     }
}
$.ajax({
    url: 'http://localhost:8888/rest/company/hertz/sessions/amir/help',
    dataType: 'json',
    data: null,
    success: function(data) { 
        $("#abc").html(dumpObj(data,"Result",'',0));
         }
    });
为此,我有一个javascript,如下所示:

@Path("/company/{companyName}/sessions")
public class RESTSessionController {

    RESTService service = new RESTService();
     @GET
     @Produces({"application/json"})
     @Path("/{username}/{password}") 
     public Result getFriend(@PathParam ("companyName") String companyName ,
             @PathParam ("username") String username,
             @PathParam ("password") String password){

         System.out.println(companyName);
         return service.login(username,password);
     }
}
$.ajax({
    url: 'http://localhost:8888/rest/company/hertz/sessions/amir/help',
    dataType: 'json',
    data: null,
    success: function(data) { 
        $("#abc").html(dumpObj(data,"Result",'',0));
         }
    });
这很好用,我得到了回报:

{"code":"200","description":"Amir is now logged in.","payload":{"@type":"xs:string","$":"Amir123"}}
这很好

现在,我尝试更进一步,使用对象调用我的服务,因此我将代码更改为:

$.ajax({
    qObj={username:"Amir",password:"123",companyName:"hertz"}
    url: 'http://localhost:8888/rest/company/',
    dataType: 'json',
    data: JSON.stringify(qObj),
    success: function(data) { 
        $("#abc").html(dumpObj(data,"Result",'',0));
         }
    });
 @PUT
 @Produces(MediaType.APPLICATION_JSON)
 @Consumes(MediaType.APPLICATION_JSON)
 @Path("/")
 public API_Session login(API_Session_Request request){
而且它不会起作用

我的问题很简单,如何使用jquery/javascript调用路径中有参数(或没有参数)的REST服务

谢谢你的帮助


Amir

为什么必须使用JSON.stringify?试试这个,让我知道:)


为什么必须使用JSON.stringify?试试这个,让我知道:)

找到了解决办法 如果您正在寻找相同的答案,以下是我的发现: 1) 不能将路径中使用的用户变量作为发送到REST服务的对象的一部分。所以在我的例子中,{companyName}不能真正作为json对象的一部分传递。 2) 在方法声明中,它必须是一个指令,指示此方法需要一个json对象,这种情况下,我将代码更改为:

$.ajax({
    qObj={username:"Amir",password:"123",companyName:"hertz"}
    url: 'http://localhost:8888/rest/company/',
    dataType: 'json',
    data: JSON.stringify(qObj),
    success: function(data) { 
        $("#abc").html(dumpObj(data,"Result",'',0));
         }
    });
 @PUT
 @Produces(MediaType.APPLICATION_JSON)
 @Consumes(MediaType.APPLICATION_JSON)
 @Path("/")
 public API_Session login(API_Session_Request request){
一切都像一个符咒

3) 在javascript中,您应该使用JSON.stringify命令来处理您的对象:

var qObj={username:"Amir",password:"123",company_name:"hertz"}
$.ajax({
    type:'PUT',
    url: 'http://localhost:8888/rest/company/sessions',
    dataType: 'json',
    data: JSON.stringify(qObj),
    contentType: "application/json; charset=utf-8",
    success: function(data) { 
        $("#abc").html(dumpObj(data,"Result",'',0));
         }
    });
希望这能帮助您节省一些时间。

找到了解决方案 如果您正在寻找相同的答案,以下是我的发现: 1) 不能将路径中使用的用户变量作为发送到REST服务的对象的一部分。所以在我的例子中,{companyName}不能真正作为json对象的一部分传递。 2) 在方法声明中,它必须是一个指令,指示此方法需要一个json对象,这种情况下,我将代码更改为:

$.ajax({
    qObj={username:"Amir",password:"123",companyName:"hertz"}
    url: 'http://localhost:8888/rest/company/',
    dataType: 'json',
    data: JSON.stringify(qObj),
    success: function(data) { 
        $("#abc").html(dumpObj(data,"Result",'',0));
         }
    });
 @PUT
 @Produces(MediaType.APPLICATION_JSON)
 @Consumes(MediaType.APPLICATION_JSON)
 @Path("/")
 public API_Session login(API_Session_Request request){
一切都像一个符咒

3) 在javascript中,您应该使用JSON.stringify命令来处理您的对象:

var qObj={username:"Amir",password:"123",company_name:"hertz"}
$.ajax({
    type:'PUT',
    url: 'http://localhost:8888/rest/company/sessions',
    dataType: 'json',
    data: JSON.stringify(qObj),
    contentType: "application/json; charset=utf-8",
    success: function(data) { 
        $("#abc").html(dumpObj(data,"Result",'',0));
         }
    });

希望这能帮你节省一些时间。

我知道这是离题的,但使用
GET
请求让用户登录听起来真是个糟糕的主意。我认为他只是在玩弄jquery,否则这是一个非常糟糕的做法,因为密码没有在你提到的上面散列。Jay,谢谢你的评论,Quynh是对的,这只是我试图构建我的框架,并确保在启动主应用程序之前我已经拥有了所需的一切。关于使用GET和plain password,您的两条评论都是有效的。我知道这是离题的,但是使用
GET
请求让用户登录听起来是个非常糟糕的主意。我认为他只是在玩弄jquery,否则这是一个非常糟糕的做法,因为密码没有在您提到的内容之上散列。Jay,谢谢您的评论,Quynh是对的,这只是我试图构建我的框架,并确保在启动主应用程序之前我拥有所有需要的东西。关于使用GET和plain password,您的两条评论都是有效的。尝试此操作后,结果相同。它从Jersey获得404页未找到结果。我在这里看到4个参数/hertz/sessions/amir/help,但您的数据只包含3个。sessions是路径的一部分,不是参数。好的,试试这个@path(“/company/sessions/{companyName}”)并在ajax调用中更改url路径。所以您的所有url都应为“”尝试此操作并获得相同的结果。它从Jersey获得404页未找到结果。我在这里看到4个参数/hertz/sessions/amir/help,但您的数据只包含3个。sessions是路径的一部分,不是参数。好的,试试这个@path(“/company/sessions/{companyName}”)并在ajax调用中更改url路径。所以您的所有url都应为“”