PUT请求返回400 Bad Request Error

时间:2014-01-12 16:08:19

标签: rest jquery java-ee jax-rs

我正在对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函数但是它没有接收查询参数。

任何帮助都会非常感激!

1 个答案:

答案 0 :(得分:3)

首先,您可以将@QueryParam注释替换为@FormParam注释,以检索PUT请求的“新”和“旧”参数。然后,您应该从服务器和浏览器端代码中删除@Consumes("application/json")注释和contentType:application/json,最后将提交的JSON格式数据替换为“new = qwe& old = 123”。

如果你想继续使用JSON格式的内容,你应该将传入的主体映射到一个实体(即一个用JAXB注释注释的Java类),这样你使用的JAX-RS实现可以解组传入的将JSON内容转换为Java对象。

HTH。