【问题标题】:Response code is 400 while using HttpURLConnection to POST in java for REST API响应代码为 400,同时使用 HttpURLConnection 在 Java 中发布 REST API
【发布时间】:2016-05-25 22:23:48
【问题描述】:

我是 REST API 的新手。我需要发布到网站,但我得到的响应代码为 400,内容类型为 text/plain

如果我使用谷歌的高级 REST 客户端应用程序,我会得到不同的结果。响应码为500,内容类型为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 {
	
	@Test
	public static void postS() throws Exception {
		
		URL url;
		HttpURLConnection connection = null;  
		
		String urlParameters  = "email=tester0@xxx.com&profileName=Tester0&password=test&roleId=1";
		
		String email = "tester0@xxx.com";
		String profileName = "Tester0";
		String password = "test";
		int roleId = 1;
		
		String query = String.format("email=%s&profileName=%s&password=%s&roleId=%s", 
		     (email), 
		     URLEncoder.encode(profileName),
		     URLEncoder.encode(password),
		     (roleId));
		String query1="?";
		query1 = query1.concat(query);
		System.out.println("query1: " +query1);
		
		String type = "application/json";
		
		url = new URL("http://......com");
		connection = (HttpURLConnection)url.openConnection();
		
		connection.setDoOutput(true);
		connection.setRequestMethod("POST");
		connection.setRequestProperty( "Content-Type", type );
		
		connection.setRequestProperty( "charset", "utf-8");
		connection.setUseCaches( false );
		
		// creates an output stream on the connection and opens an OutputStreamWriter on it:
				
			OutputStream output = connection.getOutputStream();
			Writer writer = new OutputStreamWriter(output, "UTF-8");
			
			// client's output is the server's input.
		    writer.write(URLEncoder.encode(query1, "UTF-8"));
		
		
		String contentType=connection.getContentType();
		int responseCode=connection.getResponseCode();
		int len = connection.getContentLength();
		String rmsg = connection.getResponseMessage();
		
		System.out.println("ContentType: " +contentType);
		System.out.println("ResponseCode: " +responseCode);
		System.out.println("Content length: " +len);
		
		System.out.println("URL " + connection.getURL());
		System.out.println("Response msg: " + rmsg);
		
		
	}
	
}

【问题讨论】:

    标签: java json rest httpurlconnection


    【解决方案1】:

    使用Jersey Client:

    这里是一个例子:

    final WebTarget target = ClientBuilder.newClient().target("http://......com");
    
    final WebTarget webTargetWithParams = target.queryParam("email", "tester0@xxx.com")
                                                .queryParam("profileName", "Tester0")
                                                .queryParam("password", "test")
                                                .queryParam("roleId", "1");
    
    final Response response = webTargetWithParams.request().get();
    
    System.out.println(response.readEntity(String.class));
    

    【讨论】:

    • 但是,如果服务器响应 400 这意味着:您没有在 POST 中向服务器发送正确的数据。在您的代码中,我看不到您要发送什么数据。
    • jersey Client 是唯一的方法吗?这是我发送到服务器的数据 String query = String.format("email=%s&profileName=%s&password=%s&roleId=%s", (email), URLEncoder.encode(profileName), URLEncoder.encode(password) , (roleId));字符串查询1="?"; query1 = query1.concat(查询);输出流输出 = 连接.getOutputStream(); Writer writer = new OutputStreamWriter(output, "UTF-8"); writer.write(URLEncoder.encode(query1, "UTF-8"));
    猜你喜欢
    • 2019-06-06
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多