Я пытаюсь сделать POST-запрос к Rest API, который находится в Spring.
У меня есть пользовательский интерфейс в приложении REACT, и я пытаюсь сделать POST-запрос.В запросе POST я должен отправить объект JSON, как показано ниже:
{
"description": "Please write a small description",
"name": "anbcd",
"aFrom": "string1",
"bFrom": "string2",
"aTo": "string3",
"bTo": [
"item1"
]
}
Мой код запроса в приложении REACT выглядит следующим образом:
export const callPOSTRestAPI = async (url, obj) => {
let responseObj = {
data: null,
error: null
}
try {
const response = await fetch(url, {
method: "POST",
credentials: "include",
body: JSON.stringify(obj),
});
//console.log(response.json());
if (response.ok) {
let result = await response.json();
responseObj.data = result;
responseObj.error = null;
}
else {
throw new Error(response.statusText);
}
}
catch (error) {
responseObj.data = null;
responseObj.error = ("Error:" + error);
}
return responseObj;
}
Проблема:
REST API возвращает:
500 Internal Server.
Если я включаю заголовки в вызов выборки, я получаю сообщение об ошибке предпечатной проверки.
Пожалуйста, помогите.
Дополнительная информация:
Ниже приведен вызов GET fetch, который прекрасно работает.
export const callGETRestAPI = async (url) => {
console.log(url);
let responseObj = {
data: null,
error: null
}
try {
const response = await fetch(url, {
method: "GET",
credentials: "include"
});
if (response.ok) {
let result = await response.json();
responseObj.data = result;
responseObj.error = null;
}
else {
throw new Error(response.statusText);
}
}
catch (error) {
responseObj.data = null;
responseObj.error = ("Error:" + error);
}
return responseObj;
}
Ниже приведены заголовки ответа, установленные в Spring REST API:
response.setHeader("Access-Control-Allow-Origin", allowOrigin);
response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Headers", "Origin,Accept, X-Requested-With, " +
"Content-Type, Authorization, Access-Control-Request-Method, Access-Control-Request-Headers, Access-Control-Allow-Credentials");
В консоли: я вижу следующие вещи:
Заголовки запроса:
Accept: */*
Content-Type: text/plain;charset=UTF-8
Origin: http://localhost:3000
Content-Length: 188
Accept-Language: en-us
Host: host-url
Referer: http://localhost:3000/
Accept-Encoding: br, gzip, deflate
Connection: keep-alive
Заголовки ответа:
HTTP/1.1 500 Internal Server Error
Content-Type: text/plain;charset=UTF-8
Access-Control-Allow-Origin: http://localhost:3000
Pragma: no-cache
X-XSS-Protection: 1; mode=block
Access-Control-Allow-Methods: POST, PUT, GET, OPTIONS, DELETE
Access-Control-Max-Age: 3600
Access-Control-Allow-Headers: Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Authorization, Access-Control-Request-Method, Access-Control-Request-Headers, Access-Control-Allow-Credentials
Expires: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Date: Sun, 16 Jun 2019 01:30:55 GMT
Access-Control-Allow-Credentials: true
Content-Length: 14
Connection: keep-alive
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Данные запроса:
MIME Type: text/plain
Encoding: UTF-8
Request Data: {
"description": "Please write a small description",
"name": "anbcd",
"aFrom": "string1",
"bFrom": "string2",
"aTo": "string3",
"bTo": [
"item1"
]
}