2016-05-25 6 views
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 
 
}

答えて

0

使用Jersey Client

ここ

例:

final WebTarget target = ClientBuilder.newClient().target("http://......com"); 

final WebTarget webTargetWithParams = target.queryParam("email", "[email protected]") 
              .queryParam("profileName", "Tester0") 
              .queryParam("password", "test") 
              .queryParam("roleId", "1"); 

final Response response = webTargetWithParams.request().get(); 

System.out.println(response.readEntity(String.class)); 
+0

しかし、もし意味サーバ応答400:あなたが右のデータを送信しませんでした。サーバーをPOSTに入れます。あなたのコードでは、どのデータを送信しているのか分かりません。 – elysrivero99

+0

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

関連する問題