Java HTTP 400响应Servlet

Java HTTP 400响应Servlet,java,servlets,Java,Servlets,下面的代码是一个servlet的一部分,该servlet获取cookie值并向另一个具有相同cookie值和附加头的服务发送请求。 我在responseCode=serviceUrlConnection.getResponseCode()上得到HTTP 400响应和onis=serviceUrlConnection.getInputStream() 使用相同的输入值(cookie和附加的头),我能够使用soapui从服务获得正确的输出。有人能指出错误吗 URL serviceURL

下面的代码是一个servlet的一部分,该servlet获取cookie值并向另一个具有相同cookie值和附加头的服务发送请求。 我在
responseCode=serviceUrlConnection.getResponseCode()上得到HTTP 400响应和on
is=serviceUrlConnection.getInputStream()

使用相同的输入值(cookie和附加的头),我能够使用soapui从服务获得正确的输出。有人能指出错误吗

       URL serviceURL = new URL(serviceUrlInput);
        logger.info(" Validate Test token service Url" + serviceUrlInput);
        URLConnection serviceConnection = serviceURL.openConnection();
        HttpURLConnection serviceUrlConnection = (HttpURLConnection)serviceConnection; 
        serviceUrlConnection.setRequestProperty("Content-Type", "application/json");
        serviceUrlConnection.setRequestProperty("charset", "UTF-8");
        String TestCookieValue = null;

        Cookie[] cookies = req.getCookies();
        if (cookies != null) {
          for (int i = 0; i < cookies.length; i++) {
            if (cookies[i].getName().equals("Test")) {
              //TestToken = cookies[i].getValue();

                TestCookieValue = cookies[i].getValue();
                logger.info("Test cookie  : " + "Test=" +TestCookieValue);

                //serviceUrlConnection.setRequestProperty("Cookie", TestCookie.substring(0, TestCookie.indexOf(';')));
                serviceUrlConnection.setRequestProperty("Cookie", "Test=" +TestCookieValue);
              break;
            }
          }
        }
         //Set the timestamp in the header
        Date javaUtilDate = new Date();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
        String formattedDateTime = formatter.format(javaUtilDate);
        serviceUrlConnection.setRequestProperty("timestamp", formattedDateTime);
        logger.info(adapterDescription + " :: timestamp added with value :: " + formattedDateTime);

        //Set the transactionId header
        UUID uuid = java.util.UUID.randomUUID();
        serviceUrlConnection.setRequestProperty("transactionId", uuid.toString());
        logger.info(adapterDescription + " :: transactionID added with value :: " + uuid.toString());

        //Set the sourceSystem header
        String sourceSystem =  + InetAddress.getLocalHost().getHostName();
        serviceUrlConnection.setRequestProperty("sourceSystem", sourceSystem);
        logger.info(adapterDescription + " :: sourceSystem added with value :: " + sourceSystem);


        int responseCode;
        serviceUrlConnection.setDoOutput(true);
        wr = new DataOutputStream(serviceUrlConnection.getOutputStream());
        wr.writeBytes("");
        logger.info(adapterDescription +" :: " + wr);

        responseCode = serviceUrlConnection.getResponseCode();
        logger.info(adapterDescription +":: responseCode :: " + responseCode);
        is = serviceUrlConnection.getInputStream();
URL serviceURL=新URL(serviceUrlInput);
info(“验证测试令牌服务Url”+serviceUrlInput);
URLConnection serviceConnection=serviceURL.openConnection();
HttpURLConnection serviceUrlConnection=(HttpURLConnection)serviceConnection;
setRequestProperty(“内容类型”、“应用程序/json”);
setRequestProperty(“字符集”、“UTF-8”);
字符串TestCookieValue=null;
Cookie[]cookies=req.getCookies();
如果(cookies!=null){
for(int i=0;i
错误400表示您的请求有问题。需要检查的几件事:

  • 服务器真的需要GET请求而不是POST吗?要执行post,您可以调用
    serviceUrlConnection.setRequestMethod(“post”)
  • 您正在执行设置
    setDoOutput(true)
    ,但没有在请求中写入任何内容。也许你需要写一些内容

默认情况下,请求方法是GET。因此,如果不需要发送数据,我们不需要设置
DataOutputStream
,也不需要调用
setDoOutput(true)

请参见一个问题:-

HTTP 400是“错误的请求”,所以很明显,您的代码没有做任何您正在调用的服务URL想要做的事情。在此基础上,我不能同意您的代码和SoapUI生成完全相同的请求的说法。您是否尝试使用HTTP嗅探工具/浏览器插件记录这两个请求并检查差异?
/*
Commented out the below lines:- 
wr = new DataOutputStream(serviceUrlConnection.getOutputStream());
serviceUrlConnection.setDoOutput(true);
*/