Это журнал с сервера:Java HttpServlet не удалось получить какие-либо параметры из запроса POST, сделанного клиентом, используя OKHttp
POST Request reader reads:--3cd58f21-8ffa-46a0-b1c0-0e4660c2ca28
POST Request reader reads:Content-Disposition: form-data; name="device"
POST Request reader reads:Content-Length: 163
POST Request reader reads:
POST Request reader reads:{"deviceId":"5ccf7f0fb7b1","manufacturer":"Wow Lamp","name":"Wow-b7b1","type":"lamp","userId":"amzn1.account.AGGL3JOPQ3UTF74KQY2TJCYSYNAQ","timer":0,"chosen":true}
POST Request reader reads:--3cd58f21-8ffa-46a0-b1c0-0e4660c2ca28--
Результат выше, что читатель прочитал из запроса. Но если getParameter вызывается из экземпляра запроса, карта параметров имеет значение NULL.
Это содержание карты параметров:
POST Request:{}
Как вы можете видеть, что отображение не содержит параметр, но читатель может прочитать данные, отправленные клиентом.
Это код сервера:
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException
{
System.out.println("POST Request:" + req.getParameterMap());
if(isPostRequestValid(req))
{
try
{
handleRequest(req);
}
catch (JSONException e)
{
e.printStackTrace();
}
}
sendResponse(resp);
try
{
BufferedReader reader = req.getReader();
String inputLine;
while((inputLine = reader.readLine()) != null)
{
System.out.println("POST Request reader reads:" + inputLine);
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
Там должен быть какой-то кодирование ошибка на стороне клиента
Это код клиента:
new Thread(new Runnable() {
@Override
public void run() {
OkHttpClient client = new OkHttpClient();
RequestBody requestBody = new MultipartBuilder()
.type(MultipartBuilder.FORM) //this is what I say in my POSTman (Chrome plugin)
.addFormDataPart("device", device)
.build();
Request request = new Request.Builder()
.url(Constant.BASE_URL + "update_device.html")
.post(requestBody)
.build();
try {
Response response = client.newCall(request).execute();
String responseString = response.body().string();
response.body().close();
// do whatever you need to do with responseString
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
Но клиентская сторона использовала данные формы, поэтому что здесь может быть неправильным?
Какая версия OkHttp вы используете? – Serhiy
@Serhiy версия 2.5.1 –
Хмм, я не могу найти эту версию в центре Maven .. есть 2.5.0 и 2.6.0 .. но не 2.5.1 .. Я также не могу найти javadoc для 2.5.1. Дважды проверьте версию пожалуйста. – Serhiy