0
私はREST APIの初心者です。私はウェブサイトに投稿する必要がありますが、レスポンスコードは400、コンテンツタイプはテキスト/プレーンとして取得しますREST APIのためにHttpURLConnectionを使用してPOST中のレスポンスコードが400である
Googleの高度なRESTクライアントアプリケーションを使用すると、結果が異なります。応答コードは500、content-typeはtext/htmlです。
投稿データ(query1)が正しく終了していませんか?これは正しい方法ですか? JAX-RSを使用する必要がありますか?誰かが助けてくれますか?感謝します。
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import org.testng.annotations.Test;
public class RestfullAPIHttpURLConnection {
\t
\t @Test
\t public static void postS() throws Exception {
\t \t
\t \t URL url;
\t \t HttpURLConnection connection = null;
\t \t
\t \t String urlParameters = "[email protected]&profileName=Tester0&password=test&roleId=1";
\t \t
\t \t String email = "[email protected]";
\t \t String profileName = "Tester0";
\t \t String password = "test";
\t \t int roleId = 1;
\t \t
\t \t String query = String.format("email=%s&profileName=%s&password=%s&roleId=%s",
\t \t (email),
\t \t URLEncoder.encode(profileName),
\t \t URLEncoder.encode(password),
\t \t (roleId));
\t \t String query1="?";
\t \t query1 = query1.concat(query);
\t \t System.out.println("query1: " +query1);
\t \t
\t \t String type = "application/json";
\t \t
\t \t url = new URL("http://......com");
\t \t connection = (HttpURLConnection)url.openConnection();
\t \t
\t \t connection.setDoOutput(true);
\t \t connection.setRequestMethod("POST");
\t \t connection.setRequestProperty("Content-Type", type);
\t \t
\t \t connection.setRequestProperty("charset", "utf-8");
\t \t connection.setUseCaches(false);
\t \t
\t \t // creates an output stream on the connection and opens an OutputStreamWriter on it:
\t \t \t \t
\t \t \t OutputStream output = connection.getOutputStream();
\t \t \t Writer writer = new OutputStreamWriter(output, "UTF-8");
\t \t \t
\t \t \t // client's output is the server's input.
\t \t writer.write(URLEncoder.encode(query1, "UTF-8"));
\t \t
\t \t
\t \t String contentType=connection.getContentType();
\t \t int responseCode=connection.getResponseCode();
\t \t int len = connection.getContentLength();
\t \t String rmsg = connection.getResponseMessage();
\t \t
\t \t System.out.println("ContentType: " +contentType);
\t \t System.out.println("ResponseCode: " +responseCode);
\t \t System.out.println("Content length: " +len);
\t \t
\t \t System.out.println("URL " + connection.getURL());
\t \t System.out.println("Response msg: " + rmsg);
\t \t
\t \t
\t }
\t
}
しかし、もし意味サーバ応答400:あなたが右のデータを送信しませんでした。サーバーをPOSTに入れます。あなたのコードでは、どのデータを送信しているのか分かりません。 – elysrivero99
jersey Clientはこれを行う唯一の方法ですか?この私が、サーバーの文字列クエリに送信していたデータである= String.Formatの( "Eメール=%S&PROFILENAME =%S&パスワード=%S&roleId =%s" は、 \t \t(電子メール)、 \t \t URLEncoder.encode(プロファイル名)、 \t \t URLEncoder.encode(password)、 \t \t(roleId)); \t \t文字列query1 = "?"; \t \t query1 = query1.concat(query); OutputStream出力= connection.getOutputStream(); \t \t \tライターライター=新しいOutputStreamWriter(出力、 "UTF-8"); \t \t writer.write(URLEncoder.encode(query1、 "UTF-8")); – Snellikeri