从Curl POST请求中提取数据

Ani*_*kur 1 java post curl servlets

我正在使用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
Run Code Online (Sandbox Code Playgroud)

但是在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));

    }

}
Run Code Online (Sandbox Code Playgroud)

有什么建议?在数据内部获取数据的更好方法是"details": { "imeiNumber": "123456789123456", "phoneNumber": "9999999999"}什么?

Jun*_*san 5

-d'{"name":"PhoneName","description":"Phone Description!","details":{"imeiNumber":"123456789123456","phoneNumber":"9999999999"}}'

将输入json推送到POST请求有效负载.而且你不能简单地使用它们的名称解组输入json属性,因此你得到了

System.out.println("Name : " + request.getParameter("name"));   //gives null
Run Code Online (Sandbox Code Playgroud)

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();
Run Code Online (Sandbox Code Playgroud)

现在你应该在变量体中得到你的输入json.现在使用json解析器来获取attribues值,例如:

JsonParser parser = new JsonParser();
JsonObject obj = parser.parse(body).getAsJsonObject();
String name = obj.get("name").toString();
Run Code Online (Sandbox Code Playgroud)