我正在对RESTfull服务进行PUT请求,这改变了用户的密码。暂时我在我的AJAX测试我的服务中只修改了新密码和旧密码的值。但它给了我一个400错误。
AJAX致电
$.ajax({
type: "PUT",
url: "api/teachers/"+user,
data: {"old":"123","new":"qwe"},
contentType: "application/json",
success: function(data,status)
{
datax = data;
alert(data+status);
ko.applyBindings(new AddMarkSheetKo(data));
},
error: function(XMLHttpRequest, textStatus, errorThrown)
{
alert(XMLHttpRequest+textStatus+ errorThrown);
// error handler here
}
});
休息功能:
@PUT
@Path("/{name}")
@Consumes(MediaType.APPLICATION_JSON)
public Response changePwd(@PathParam ("name")String name,@QueryParam ("old") String old, @QueryParam("new") String nw){
System.out.println("entered function"+old+nw);
Teacher t = DataAccessUtil.getByName(Teacher.class, name);
if(t.getPassword().equals(old)){
t.setPassword(nw);
DataAccessUtil.update(t);
return Response.ok().build();
}
else{
return Response.status(Status.BAD_REQUEST).entity("Wrong password !!!").build();
}
//return reposnse;
}
此信息在打印的控制台上可能很有用
输入functionnullnull
因此调用restfull函数但是它没有接收查询参数。
任何帮助都会非常感激!
答案 0 :(得分:3)
首先,您可以将@QueryParam
注释替换为@FormParam
注释,以检索PUT请求的“新”和“旧”参数。然后,您应该从服务器和浏览器端代码中删除@Consumes("application/json")
注释和contentType:application/json
,最后将提交的JSON格式数据替换为“new = qwe& old = 123”。
如果你想继续使用JSON格式的内容,你应该将传入的主体映射到一个实体(即一个用JAXB注释注释的Java类),这样你使用的JAX-RS实现可以解组传入的将JSON内容转换为Java对象。
HTH。