为什么QueryParam返回null

时间:2015-04-30 00:38:32

标签: java jersey jax-rs

我有一个post方法,我尝试添加参数" enc":

protected void sendPost(String url, String encData) throws Exception {

    URL obj = new URL(url);
    HttpURLConnection con = (HttpURLConnection) obj.openConnection();

    //add request header
    con.setRequestMethod("POST");
    con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");

    // Send post request
    con.setDoOutput(true);
    OutputStreamWriter wr = new OutputStreamWriter(con.getOutputStream());
    wr.write("enc="+encData);
    wr.flush();
    wr.close();

    int responseCode = con.getResponseCode();
    System.out.println("\nSending 'POST' request to URL : " + url);
    //System.out.println("Post parameters : " + urlParameters);
    System.out.println("Response Code : " + responseCode);
}

但是在我的服务器代码(下面)中,我在尝试获取数据时得到NULL值。它只是一个字符串,而不是JSON或任何花哨的东西。我也尝试将参数编写为"?enc =" + endData,这也不起作用。此外,路径encRead也会输入到网址中,因此我不认为这是问题所在。

    @Path("/encRead")
    @POST
    public void decryptData(@QueryParam("enc") String enc) {

        System.out.println("got endData: "+enc);

    }

到目前为止,我一直在引用Jersey POST Method is receiving null values as parameters的答案,但仍未提出解决方案

1 个答案:

答案 0 :(得分:1)

问题是您正在尝试使用wr.write("enc="+encData);写入请求正文。 @QueryParam应该在query string中。所以这反而会起作用

public static void main(String[] args) throws Exception {
    sendPost(".../encRead", "HelloWorld");
}

protected static void sendPost(String url, String encData) throws Exception {
    String concatUrl = url + "?enc=" + encData;
    URL obj = new URL(concatUrl);
    [...]
    //wr.write("enc=" + encData);