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
}
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
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