【问题标题】:Passing an object to Rest from javascript从javascript将对象传递给Rest
【发布时间】:2012-07-30 14:18:57
【问题描述】:

这里是场景 我有一个 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);
     }
}

要调用它,我有一个 javascript 如下:

$.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));
         }
    });

它不会起作用。

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

感谢帮助

阿米尔

【问题讨论】:

  • 我知道这不是主题,但是使用GET 请求让用户登录听起来是个坏主意。
  • 我认为他只是在玩 jquery,否则这是一个非常糟糕的做法,因为密码没有在您提到的内容之上散列。
  • Jay,感谢您的评论,Quynh 是对的,这只是我尝试构建我的框架并确保在启动主应用程序之前我拥有所需的一切。您的两个 cmets 对于使用 GET 和纯密码都是有效的。

标签: java javascript jquery rest


【解决方案1】:

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

 @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));
         }
    });

希望这可以帮助您节省一些时间。

【讨论】:

    【解决方案2】:

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

    $.ajax({
        url: 'http://localhost:8888/rest/company/',
        dataType: 'json',
        data: {username:"Amir",password:"123",companyName:"hertz"},
        success: function(data) { 
            $("#abc").html(dumpObj(data,"Result",'',0));
             }
        });
    

    【讨论】:

    • 试过这个,结果一样。从 Jersey 得到 404 page not found 结果。
    • 我在这里看到 4 个参数 /hertz/sessions/amir/help 但你的数据只包含 3 个。
    • 会话是路径的一部分,不是参数。
    • 好的,试试这个 @Path("/company/sessions/{companyName}") 并在 ajax 调用中更改您的 url 路径。所以。你所有的网址都应该是'localhost:8888/rest/company/sessions'
    猜你喜欢
    • 2014-10-07
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多