这是场景 我有一个 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 服务?
感谢帮助
阿米尔
最佳答案
找到了解决办法 如果您正在寻找相同的答案,这里是我的发现: 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));
}
});
希望这可以帮助您节省一些时间。
关于java - 从 javascript 将对象传递给 Rest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11763437/