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

从Curl POST请求中提取数据

冉德元
2023-03-14

我正在使用curl发出一个POST请求,如下所示

curl -H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-X POST \
-d '{ "name": "PhoneName", "description": "Phone Description!", "details": { "imeiNumber": "123456789123456", "phoneNumber": "9999999999"}}' \
-k \
http://test.domain.com/myTestServer/devices

但在servlet中,我无法获取任何数据。

public void devices(HttpServletRequest request, HttpServletResponse response) throws IOException {

    System.out.println("Got Request for devices");
    System.out.println("Request is : "+ request);
    System.out.println("Name : " + request.getParameter("name"));   //gives null
    System.out.println("description : " + request.getParameter("description")); //gives null
    Enumeration<String> paramNames = request.getParameterNames();   //Empty Enumeration
    while(paramNames.hasMoreElements()){
        String paramName = paramNames.nextElement();
        System.out.println(paramName + " : " + request.getParameter(paramName));

    }

}

有什么建议吗?还有一种在数据内部获取数据的更好方法,如“details”:{“imeinumber”:“123456789123456”,“phoneNumber”:“99999999999”}

共有2个答案

欧阳元魁
2023-03-14

有什么建议吗?还有一种更好的方法可以在数据中获取数据,如“details”:{“imeinumber”:“123456789123456”,“phoneNumber”:“99999999999”}

对不起,我对curl没有任何想法,但我可以帮助您使用GSON库解析JSON字符串。只需将上面的JSON字符串封装在{...}中,并将其解析为Java对象,如下面的示例代码所示。示例代码

class Details {
    private String name;
    private String description;
    private PhoneNumberDetails details;
    // getter & setter  
}


class PhoneNumberDetails{
    private String imeiNumber;
    private String phoneNumber;
    // getter & setter    
}

String json = "{ \"name\": \"PhoneName\", \"description\": \"Phone Description!\", \"details\": { \"imeiNumber\": \"123456789123456\", \"phoneNumber\": \"9999999999\"}}";
Details data = new Gson().fromJson(json, Details.class);
System.out.println(new GsonBuilder().setPrettyPrinting().create().toJson(data));

输出:

{
  "name": "PhoneName",
  "description": "Phone Description!",
  "details": {
    "imeiNumber": "123456789123456",
    "phoneNumber": "9999999999"
  }
}
查锦程
2023-03-14

-d'{“name”:“phoneName”,“description”:“phone description!”,“details”:{“imeinumber”:“123456789123456”,“phoneNumber”:“9999999999”}}'\

将输入json推送到POST请求负载中。并且不能简单地使用输入的json属性的名称来解组,因此可以得到

System.out.println("Name : " + request.getParameter("name"));   //gives null

这类语句的null值。

您需要从HttpServletRequest对象读取POST请求负载,然后使用json解析器解析它以获得属性值。

您可以像这样读取整个POST请求负载:

try {
    InputStream inputStream = request.getInputStream();
    if (inputStream != null) {
        bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        char[] charBuffer = new char[128];
        int bytesRead = -1;
        while ((bytesRead = bufferedReader.read(charBuffer)) > 0) {
            stringBuilder.append(charBuffer, 0, bytesRead);
        }
    } else {
        stringBuilder.append("");
    }
} catch (IOException ex) {
    throw ex;
} finally {
    if (bufferedReader != null) {
        try {
            bufferedReader.close();
        } catch (IOException ex) {
            throw ex;
        }
    }
}

body = stringBuilder.toString();

现在您应该在可变体中获得输入json。现在使用json解析器获取Attributes值,例如如下所示:

JsonParser parser = new JsonParser();
JsonObject obj = parser.parse(body).getAsJsonObject();
String name = obj.get("name").toString();
 类似资料:
  • 问题内容: 我已经环顾了几天,无法解决这个问题。基本上,我正在将图像上传到服务器并获得ID作为回报,问题是我无法弄清楚如何提取此ID并将其更改为准备好保存到数据库的String。 程式码 这是我得到的输出 问题答案: 您正在接收JSON;您已经使用该方法将其解码为Python结构: 您可以将其视为任何其他Python列表;内容只是一个字典,因此另一个字典键可以获取值: 当您知道上传了多少张图像时,

  • 因此,我试图构建一个简单的REST API,并希望试用spark,但由于某种原因,我似乎无法提取任何参数。 下面是我的测试endpoint: 现在,如果我试图在http://localhost:4567/hello上用主体{“username”:“bla”}发出请求,那么str变量只是NULL。但是如果我在req上调用body方法,req.body().toString();它确实会将正文{“us

  • 我有登录请求,在请求中我获得了JSESSIONID和XSRF-TOKEN作为Cookie数据,如下所示 如果需要,如何从响应中提取JSESSIONID,以便在注册Cookie中传递该变量 在此处输入图像描述

  • 我想从JAVA中的PKCS10请求中提取subject alternative name(SAN)。 首先,我使用bouncycastle获得PKCS10CertificationRequest,如下所示: 但是,我不知道是否有一种方法可以从认证请求中提取SAN值。 需要帮忙吗?

  • 我在POST请求中从角应用程序发送表单数据到我的Azure函数,这些函数在java中编译。 客户端看起来像这样: 当物品接收到azure功能时 功能的目的是通过firebase向android应用程序发送推送通知。 带有HTTP触发器的azure函数如下所示: 当我运行我得到: ------WebKitFormBoundary2gNlxQx5pqyAeDL3内容处置:表单数据。。。。 我很高兴知道

  • 当我向我的Twilio号码发送特定的消息时,我希望根据该消息采取行动。问题是,返回的是整个请求,而不是正文。 我在这里遵循了Twilio指南来创建webhook:https://www.Twilio.com/docs/sms/tutorials/how-to-receive-and-reply-java,并对其进行了修改,以查看请求主体,将其与我要查找的内容进行比较,然后根据需要做出响应。 问题正