2014-01-12 263 views
0

我正在做一個PUT請求到RESTfull服務,它改變了用戶的密碼。目前,我剛剛在我的AJAX測試服務中硬編碼了新密碼和舊密碼的值。但它給了我一個400錯誤。PUT請求返回一個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函數,但它沒有收到查詢參數。

任何幫助將非常感謝!

回答

3

首先,您可以將@QueryParam註釋替換爲@FormParam,以檢索PUT請求的「新」和「舊」參數。然後,您應該從服務器和瀏覽器端代碼中刪除@Consumes("application/json")註釋和contentType:application/json,最後用JSON格式替換提交的數據爲'new = qwe & old = 123'。

如果您希望保留JSON格式的內容,您應該將傳入正文與實體(即,使用JAXB註釋註釋的Java類)進行映射,以便您使用的JAX-RS實現可以解組將JSON內容傳入Java對象。

HTH。