从javascript向Rest传递对象
下面是一个场景 我的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
@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都应为“”