Java RESTful程序不工作

Java RESTful程序不工作,java,web-services,rest,curl,Java,Web Services,Rest,Curl,我想把这句话转换成: curl-tlsv1.2-k-X POST-H内容类型:application/json-u myuser:mypass-data binary@prueba_token.txt 进入java程序: import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.Inpu

我想把这句话转换成:

curl-tlsv1.2-k-X POST-H内容类型:application/json-u myuser:mypass-data binary@prueba_token.txt

进入java程序:

    import java.io.BufferedReader;
        import java.io.DataOutputStream;
        import java.io.IOException;
        import java.io.InputStreamReader;
        import java.io.UnsupportedEncodingException;
        import java.net.MalformedURLException;
        import java.net.URL;
        import java.security.KeyManagementException;
        import java.security.NoSuchAlgorithmException;
        import javax.net.ssl.HostnameVerifier;
        import javax.net.ssl.HttpsURLConnection;
        import javax.net.ssl.SSLSession;
        import org.apache.commons.codec.binary.Base64;

        public class VormetricClientToken {



        public static void main(String[] args) throws NoSuchAlgorithmException, KeyManagementException, UnsupportedEncodingException {
              new VormetricClientToken().DoIt();
           }//main

           private void DoIt() throws NoSuchAlgorithmException, KeyManagementException, UnsupportedEncodingException{
              String credential = Base64.encodeBase64String("myuser:mypass".getBytes("UTF-8"));
              try{
       String https_url = "https://192.168.1.13/vts/rest/v1.0/tokenize/";
       URL myurl = new URL(https_url);
       HttpsURLConnection con = HttpsURLConnection)myurl.openConnection();
       con.setHostnameVerifier(new HostnameVerifier(){      
          @Override
          public boolean verify(String hostname, SSLSession session){
             return true;
          }
       });
       String ccNum = "9876-5432-1098-7654";
       String jStr = "{\"tokengroup\" : \"pruebas\" , \"data\" :    \""+ccNum+"\", \"format\" : \"random-luhn\"}";
       con.setRequestProperty("Content-length", String.valueOf(jStr.length()));
       con.setRequestProperty("Content-Type","application/json; charset=UTF-8");
       byte[] ptext = jStr.getBytes("UTF-8");
       con.setRequestProperty("Authorization","Basic "+credential);
       con.setRequestMethod("POST");
       con.setDoOutput(true);
       try (DataOutputStream output = new DataOutputStream(con.getOutputStream())) {
          output.write(jStr.getBytes());
       }
       int responseCode = con.getResponseCode();
       System.out.println("Response Code : " + responseCode);
       BufferedReader rd= new BufferedReader(new    InputStreamReader(con.getInputStream()));
       String line = "";      
       String strResponse = "";

       while((line = rd.readLine()) != null) {
          strResponse=strResponse+line;
       }
       con.disconnect();
       System.out.println("POST response: "+strResponse);
    }catch(MalformedURLException e) {
       System.out.println("error vormetric token client malformed:"+e);
    }catch(IOException e1){
       System.out.println("error vormetric token client ioexception:"+e1);
       e1.printStackTrace();
    }//catch
 }//doit
}//vormetricclienttoken
我一直收到这样的信息:

ioexception:java.io.ioexception:服务器为URL返回了HTTP响应代码400:

我已经尝试过使用Httpclient,但结果是一样的,我知道代码400意味着web服务不理解我发送的文本。但这和我在curl中使用的文本是一样的

如果您能对可能出现的错误提供一些帮助,我们将不胜感激,因为DataOutputStream是用于序列化Java对象的,您不希望这样

只需写入con.getOutputStream返回的流

此外,内容长度用大写字母L表示,该值应为以字节为单位的长度

您可以声明并初始化ptext,但不使用它

改为:

byte[] ptext = jStr.getBytes("UTF-8");
con.setRequestProperty("Content-length", String.valueOf(ptext.length));
// more code
try (OutputStream output = con.getOutputStream()) {
    output.write(ptext);
}

尝试打开服务器上的日志文件,查看收到请求时的外观。谢谢,但请求未登录到web服务中,然后将其打开。如果你不能在web服务中做到这一点,也许容器可以做到,例如Tomcat有一个,或者。我检查了日志文件中的请求,但是只有来自curl的请求被注册,来自java的请求没有注册,但是如果你觉得我的java程序没问题,我想web服务可能有问题,而不是我的java程序,我将尝试wireshark,看看我是否能找到更多的东西。我做了您建议的更改,但仍然得到错误代码400,谢谢