2013-05-31 45 views
0

我們使用動態web應用與澤西島,客戶端是使用phonegap jQuery和Javascript的android移動。無法獲得json參數到澤西@POST/GET

當用戶向web服務器發送帖子時,它正在獲取請求,但沒有看到任何參數(@Counsume)。

我知道球衣正在工作,因爲當我試圖在其他功能上使用@get方法時,它工作正常。

這是我的代碼:

// Web服務器

package il.ac.hit; 
    import java.util.Map; 
    import javax.ws.rs.*; 
    @Path("/TakeAHikeDao") 
    public class TakeAHikeDao 
    { 
     @POST 
     @Path("userCredentialsValidate") 
     @Consumes("application/json") 
     @Produces("application/text") 
     public String userCredentialsValidate(Map<String, String> userCredentials) 
     { 
      System.out.println(userCredentials.toString()+"%%%"); 
      return ("{\"status\":\"success\"}");  
     } 
    } 

//web.xml文件

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 
    <display-name>TakeAHikeServerSide</display-name> 
    <servlet> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
    <init-param> 
     <param-name>com.sun.jersey.config.property.packages</param-name> 
     <param-value>il.ac.hit</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

//客戶端HTML與JavaScript代碼

<script language="JavaScript" charset="utf-8> 
function checkUser() 
{ 

var url=localhost:8080/rest/TakeAHikeDao/userCredentialsValidate 

$.post("url",{"username":"dan","password":"123456"},function(data) { 
     alert("JSON Data: " + data); 
     }); 

/* this is the second option we tried 
    $.get("url",{"username":"dan","password":"123456"},function(data) { 
     alert("JSON Data: " + data); 
     }); 
*/ 

/* this is the third option we tried  
    $.getJSON("url",{"username":"dan","password":"123456"},function(data) { 
      alert("JSON Data: " + data); 
      }); 
*/ 
} 
</script> 

//this is the button calling the function. 
<a href="#" data-role="button" data-icon="arrow-r" onClick="checkUser()">SUBMIT</a> 

我收到的輸出控制檯從方法:

System.out.println(userCredentials.toString()+"%%%"); 

是「%%%」(userCredentials是空的,沒有獲取發送的數據)。

在此先感謝, ofir。

回答

0

你是否試過改變你的方法簽名來取代強類型參數名而不是泛型參數?

+0

嗨Daimian,謝謝你的答案,但我不知道你的意思是通過改變方法簽名來獲取強類型參數名稱。如果你可以更具體,我會很感激。 –

+0

public String userCredentialsValidate(String username,String password) –

0

我很高興地說,我已經發現了問題, 的變化都在消耗:

@Consumes(MediaType.APPLICATION_FORM_URLENCODED) 
@Produces(MediaType.APPLICATION_JSON) 
MultiValuedMap<String, String> userCredentials 

@POST 
@Path("userCredentialsValidate") 
@Consumes(MediaType.APPLICATION_FORM_URLENCODED) 
@Produces(MediaType.APPLICATION_JSON) 
public String userCredentialsValidate(MultiValuedMap<String, String> userCredentials) 
{ 
     System.out.println(userCredentials.toString()+"%%%"); 
     return ("{\"status\":\"success\"}"); 
} 

我希望這會幫助你。