web-dev-qa-db-ja.com

パラメータが機能しないHttpURLConnectionGET呼び出し

動作しない非常に単純なコードがあります。

クラスHttoCon:

package test;

import Java.io.BufferedReader;
import Java.io.InputStream;
import Java.io.InputStreamReader;
import Java.net.HttpURLConnection;
import Java.net.URL;
import Java.net.URLConnection;
import Java.net.URLEncoder;

public class HttpCon {


public static void main(String[] args) {
    try {
        sendGet();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
    // HTTP GET request
        private static void sendGet() throws Exception {

            String url = "http://myweb.com/public/resource/data/stream";

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

            // optional default is GET
            con.setRequestMethod("GET");


            //add request header
            con.setRequestProperty("begin", "1430295300000");
            con.setRequestProperty("end", "1430297279988");
            con.setRequestProperty("id", "140621");
            con.setRequestProperty("time", "FIFTEEN_MINUTE");

            int responseCode = con.getResponseCode();
            System.out.println("\nSending 'GET' request to URL : " + url);
            System.out.println("Response Code : " + responseCode);

            BufferedReader in = new BufferedReader(
                    new InputStreamReader(con.getInputStream()));
            String inputLine;
            StringBuffer response = new StringBuffer();

            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();

            //print result
            System.out.println(response.toString());

        }
}

エラートレース:

{"fault":{"exceptionType":"MissingServletRequestParameterException","Host":"12.205.101.123","cause":"Required Long parameter 'id' is not present","status":"400","query":"/public/resource/data/stream","stackTrace":"org.springframework.web.bind.MissingServletRequestParameterException: Required Long parameter 'id' is not present\n\tat org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter$ServletHandlerMethodInvoker.raiseMissingParameterException(AnnotationMethodHandlerAdapter.Java:774)\n\tat org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveRequestParam(HandlerMethodInvoker.Java:509)\n\tat 

注:

ブラウザで直接URLを押すと、正常に機能します。

http://myweb.com/public/resource/data/stream?begin=1430295300000&end=1430297279988&id=140621&time=FIFTEEN_MINUTE

更新:

Curlの使用:

curl -X GET http://myweb.com/public/resource/data/stream?begin=1430295300000&end=1430297279988&id=140621&time=FIFTEEN_MINUTE

上記のカールは機能せず、例外は同じです-

curl -X GET 'http://myweb.com/public/resource/data/stream?begin=1430295300000&end=1430297279988&id=140621&time=FIFTEEN_MINUTE'

このカールはうまく機能します。

6
My God

パラメータを含む文字列を作成し、それをURLに追加します。これからURLObjを作成します。例えば ​​:-

String this.url = "http://myweb.com/public/resource/data/stream";
this.url += "?begin=1430295300000&end=1430297279988&id=140621
    &time=FIFTEEN_MINUTE"; 
this.urlObj = new URL(this.url);

次に、元の例のように接続を作成します。

5
Craig Parkinson

openConnectionは接続を確立し、GETを発行します。 URLはすでに開かれているため、返されたURLConnectionオブジェクトのGETパラメータの後続の設定は無視されます。

上記のリンクと同じように、クエリ文字列paramsとしてURLにパラメータを追加し、そのリンクを開きます

または

パラメータをサーバーに投稿してみてください(これはさらに優れています)

2
Axel Amthor