2016-05-25 7 views
0

Ich bin ein Neuling zu REST-APIs. Ich muss auf der Website veröffentlichen, aber ich bekomme Antwort-Code als 400 und Content-Typ wie Text/plainResponse-Code ist 400 bei der Verwendung von HttpURLConnection zu POST in Java für REST-API

Wenn ich erweiterte REST-Client-Anwendung von Google verwenden, bekomme ich unterschiedliche Ergebnisse. Der Antwortcode ist 500 und der Inhaltstyp ist text/html.

Beende ich die Postdaten (Query1) nicht korrekt? Ist das der richtige Weg? Brauche ich JAX-RS? Kann mir bitte jemand helfen? Bin dankbar.

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 
 
}

Antwort

0

Verwendung Jersey Client:

Hier ein Beispiel:

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

Aber, wenn der Server respond 400, das bedeutet: Sie sind nicht die richtigen Daten an die gesendet haben Server im POST. In deinem Code sehe ich nicht, welche Daten du sendest. – elysrivero99

+0

Ist der Jersey Client die einzige Möglichkeit dies zu tun? Dies ist die Daten, die ich an den Server String Abfrage sende = String.format ("email =% s & profil =% s & password =% s & RoleID =% s", \t \t (E-Mail), \t \t URLEncoder.encode (profil), \t \t URLEncoder.encode (Passwort), \t \t (roleId)); \t \t Zeichenfolge query1 = "?"; \t \t query1 = query1.concat (Abfrage); OutputStream-Ausgabe = connection.getOutputStream(); \t \t \t Writer Writer = neuer OutputStreamWriter (Ausgabe, "UTF-8"); \t \t writer.write (URLEncoder.encode (query1, "UTF-8")); – Snellikeri

Verwandte Themen