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"}什么?
-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)