当前位置: 首页 > 知识库问答 >
问题:

如何使用json文件执行post请求b吗

狄飞尘
2023-03-14

我对使用REST调用是新手。我有一个测试。json文件在我的项目中。

该文件的内容是:

{
  "Added": {
    "type": "K",
    "newmem": {
      "IDNew": {
        "id": "777709",
        "type": "LOP"
      },
      "birthDate": "2000-12-09"
    },
    "code": "",
    "newest": {
      "curlNew": "",
      "addedForNew": ""
    }
  }
}

Java代码

import java.io.DataInputStream;
import java.io.File;
//import org.json.JSONObject;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
public class TestAuth {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        File file = new File("test.json");
           try {
                JSONParser parser = new JSONParser();
                //Use JSONObject for simple JSON and JSONArray for array of JSON.
                JSONObject data = (JSONObject) parser.parse(
                      new FileReader(file.getAbsolutePath()));//path to the JSON file.
             System.out.println(data.toJSONString());
                URL url2 = new URL("myURL");
                HttpsURLConnection conn = (HttpsURLConnection) url2.openConnection();
                conn.setRequestMethod("POST");
                conn.setRequestProperty("Content-Type", "application/json");
                conn.setRequestProperty("Accept", "application/json");
                conn.setRequestProperty("Authorization", "Bearer aanjd-usnss092-mnshss-928nss");

                conn.setDoOutput(true);
                OutputStream outStream = conn.getOutputStream();
                OutputStreamWriter outStreamWriter = new OutputStreamWriter(outStream, "UTF-8");
                outStreamWriter.write(data.toJSONString());
                outStreamWriter.flush();
                outStreamWriter.close();
                outStream.close();
                String response = null;
                DataInputStream input = null;
                input = new DataInputStream (conn.getInputStream());
                while (null != ((response = input.readLine()))) {
                    System.out.println(response);
                    input.close ();
                }
            } catch (IOException | ParseException e) {
                e.printStackTrace();
            }
    }
}

例外:java.io.IOException:服务器返回HT

在Soap Ui,添加的endpoint和以上内容

如何读取json内容并将其作为java中的请求正文传递?

共有3个答案

解鸿运
2023-03-14
You can read the file in a method and pass the json string data read from the file to another method for posting the json data to the Rest end point
1) Read the Json data from the file
  public String readJsonDataFromFile() {
   InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(new 
                                                          File("sample.json")));
      StringWriter writer = new StringWriter();   
      IOUtils.copy(inputStreamReader, writer);
      return writer.toString());
  }

2) Call the Restend point passing the Json data
  public void postData(String payload) {
        String url = "http://localhost:8080/endPoint";

        // Use the access token for authentication
        HttpHeaders headers = new HttpHeaders();
        headers.add("Authorization", "Bearer " + token);
        HttpEntity<String> entity = new HttpEntity<>(headers);

        ResponseEntity<String> response = restTemplate.exchange(url, 
                        HttpMethod.POST, entity, String.class);
       System.out.println(response.getBody());       
}
     As the response returned is 401, it is not successfully authenticated with the rest endpoint, check the error log if it gives more info about the error like whether the access token is expired.
诸葛奇玮
2023-03-14

我承认我阅读代码快但似乎好了。豪

你可能需要发送有效的身份验证是盟

慕健
2023-03-14

我推荐你从这个主题中把json文件解析成字符串:如何用简单的JSON库把JSON文件读入java

然后,您可以使用您的JSON-String,并通过流行和简单的库< code>Gson解析到Map(或您指定的任何内容)。

String myJSON = parseFileToString();  //get your parsed json as string
Type mapType = new TypeToken<Map<String, String>>(){}.getType(); //specify type of 
your JSON format
Map<String, String> = new Gson().fromJson(myJSON, mapType); //convert it to map

然后你就可以通过这张地图作为请求的身体哟

您还可以将整个JSON(字符串版本)作为参数发送,而无需将其转换为映射或对象。这只是一个例子:)

如果您想在POST方法中传递此映射,则可以按照以下主题操作:使用HttpURLConnection在请求正文中发送数据

[更新] 它工作正常,结果 200 OK 从服务器,没有异常,没有错误:

   package com.company;

import java.io.DataInputStream;
import java.io.File;
//import org.json.JSONObject;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
public class TestAuth {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        File file = new File("test.json");
        try {
            JSONParser parser = new JSONParser();
            //Use JSONObject for simple JSON and JSONArray for array of JSON.
            JSONObject data = (JSONObject) parser.parse(
                    new FileReader(file.getAbsolutePath()));//path to the JSON file.
            System.out.println(data.toJSONString());

            String paramValue = "param\\with\\backslash";
            String yourURLStr = "http://host.com?param=" + java.net.URLEncoder.encode(paramValue, "UTF-8");

            URL url2 = new URL("https://0c193bc3-8439-46a2-a64b-4ce39f60b382.mock.pstmn.io");
            HttpsURLConnection conn = (HttpsURLConnection) url2.openConnection();
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type", "application/json");
            conn.setRequestProperty("Accept", "application/json");
            conn.setRequestProperty("Authorization", "Bearer aanjd-usnss092-mnshss-928nss");

            conn.setDoOutput(true);
            OutputStream outStream = conn.getOutputStream();
            OutputStreamWriter outStreamWriter = new OutputStreamWriter(outStream, "UTF-8");
            outStreamWriter.write(data.toJSONString());
            outStreamWriter.flush();
            outStreamWriter.close();
            outStream.close();
            String response = null;

            System.out.println(conn.getResponseCode());
            System.out.println(conn.getResponseMessage());

            DataInputStream input = null;
            input = new DataInputStream (conn.getInputStream());
            while (null != ((response = input.readLine()))) {
                System.out.println(response);
                input.close ();
            }
        } catch (IOException | ParseException e) {
            e.printStackTrace();
        }
    }
}

如果这个答案解决了你的问题,请告诉我。问候语!

 类似资料:
  • 我正在学习Spring Rest,我有一个Restful控制器,可以处理GET、PUT、POST和DELETE请求。之后,我添加了带有2个角色user和admin的Spring Security性。而且我不明白为什么我只能做GET请求,如果我试图做一个帖子,放置或删除请求,我会收到403个禁止。 Rest控制器: Spring安全配置: 更新 问题是由于CSRF保护。我禁用了CSRF,它工作得很好

  • 问题内容: 如果尝试登录https://orbit.theplanet.com/Login.aspx?url=/Default.aspx(使用任何用户名/密码组合),则可以看到登录凭据以非传统集的形式发送POST数据:仅一个寂寞的JSON字符串,没有正常的key = value对。 具体来说,代替: 甚至类似: 简单来说就是: 是否可以使用或替代模块执行此类请求?我愿意这样做,但希望有更高层次的东

  • 问题内容: 有人知道使用JSON 的正确方法吗? 我从服务器收到响应。它可以使用Chrome浏览器。 问题答案: 对于 Guzzle <= 4: 这是原始的发布请求,因此将JSON放入正文即可解决问题

  • 首先,请看一下代码。 对于优先级和步骤,我给出了onChange事件,因为它是一个选择表单。 此函数用于POST请求。我将每个编辑的数据发送到DB。 但是数据对象,您可以看到updateCols:[]。 在这个数组中,我必须放置已更改的属性。 例如,如果我更改标题、说明和开始日期,我必须将数组更改为 我觉得不可能每次都能查到这张申请表,所以我觉得这张申请表有问题。 有人可能只编辑标题,有人可能编辑

  • 通过HttpUrlConnection在服务器上注册用户数据的Post请求 在android中通过http post方法发送json对象 如何用Android通过请求发送JSON对象?

  • 有人知道使用发布JSON的正确方法吗? 我从服务器得到响应。它使用Chrome工作。