Я внедряю услугу RESTful. API REST реализован в Node.js. Когда я пытаюсь отправить объект JSON, он выдает ошибку 400 Bad Request
. После поиска по inte rnet я обнаружил, что мои клиентские программы отправляют с сервера что-то неприемлемое (вот что я понял. Если не так, пожалуйста, научите меня). Я могу быть уверен, что REST API и URL работают нормально, так как я реализовал метод GET, который работает нормально, как я ожидал. Я реализовал метод POST в java, сославшись на этот пример. Как я могу исправить эту проблему?
Метод POST в Java (Клиент). Комментированные строки - это способы, которыми я пытался создать строковую переменную в соответствии с json object
public void addSensor(int floorNo, String roomNo) {
// String POST_PARAMS = "{\n" + "\"floorNo\": "+floorNo+",\r\n" +
// " \"roomNo\": \""+roomNo+"\",\r\n" +
// " \"smokeLevel\": "+0+",\r\n" +
// " \"Co2Level\": "+0+",\r\n" +
// " \"status\": \"Inactive\"" + "\n}";
//String POST_PARAMS = "{\"floorNo\": "+floorNo+"}";
String POST_PARAMS = "{\"floorNo\": "+floorNo+",\"roomNo\": \""+roomNo+"\",\"smokeLevel\": "+0+",\"Co2Level\": "+0+",\"status\": \"Inactive\"}";
System.out.println(POST_PARAMS);
//String jsonString = "{\"floorNo\":"+floorNo+",\"roomNo\":"+roomNo+", \"smokeLevel\":\"0\", \"Co2Level\":\"0\", \"status\":\"Inactive\"}";
try {
URL url = new URL("http://localhost:8000/api/sensors");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json;utf-8");
//conn.setRequestProperty("Accept", "application/json");
conn.setDoOutput(true);
OutputStream outputStream = conn.getOutputStream();
outputStream.write(POST_PARAMS.getBytes());
outputStream.flush();
outputStream.close();
int responseCode = conn.getResponseCode();
System.out.println("POST Response Code : " + responseCode);
System.out.println("POST Response Message : " + conn.getResponseMessage());
if (responseCode == HttpURLConnection.HTTP_CREATED) { //success
BufferedReader in = new BufferedReader(new InputStreamReader(
conn.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in .readLine()) != null) {
response.append(inputLine);
} in .close();
// print result
System.out.println(response.toString());
} else {
System.out.println("POST NOT WORKED");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//your url i.e fetch data from .
}
POST-методом в API (Node.js)
app.post('/api/sensors', function (req, res) {
let floorNo = req.body.floorNo;
let roomNo = req.body.roomNo;
let smokeLevel = req.body.smokeLevel;
let Co2Level = req.body.Co2Level;
let status = req.body.status;
if (!floorNo || !roomNo || !smokeLevel || !Co2Level || !status) {
return res.status(400).send({error: true, message: 'Please Enter sensor details'});
}
dbConn.query("INSERT INTO Sensors SET ?",{floorNo:floorNo, roomNo:roomNo,smokeLevel:smokeLevel,Co2Level:Co2Level,status:status},function (error, results, fields) {
if (error) throw error;
return res.send({
error: false,
data: results,
message: 'New sensor has been added to the system successfully.'
});
});
});
Выходные данные
{"floorNo": 3,"roomNo": "A3","smokeLevel": 0,"Co2Level": 0,"status": "Inactive"}
POST Response Code : 400
POST Response Message : Bad Request
POST NOT WORKED