POST запросы отправляются без тела случайным образом - PullRequest
1 голос
/ 29 октября 2019

У меня есть внешний интерфейс Angular, который вызывает бэкэнд API Java Spring Boot. Интерфейс отправляет следующий запрос несколько раз бэкэнду, но некоторые из них терпят неудачу с кодом состояния 400 . Зарегистрированная ошибка org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing. Но когда я смотрю на вкладку Сеть в Chrome, запрос выглядит хорошо, и если я отправлю его снова, он будет успешным. Но самая странная часть в том, что если я позвоню через curl , он никогда не выйдет из строя.

Внешний интерфейс:

const endpoint = 'BACKEND_URL/settings';
const data = [{"id":123,"settings":"SETTINGS"}];
const headers = {
  'Content-Type': 'application/json; charset=UTF-8',
  'Authorization': 'ACCESS_TOKEN'
};
const params = {};

axios.post(endpoint, data, { headers, params })
  .then(function (response) {
    console.log(response.status, response.data);
  })
  .catch(function (error) {
    console.log('error', error.response.status);
  });

Бэкэнд:

@Api(tags = "API name", description = "API description")
@RestController
@RequestMapping("/")
public class SettingsController {

    @ApiOperation("Endpoint name")
    @PostMapping(path = "/settings", consumes =     MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @Transactional
    public ResponseEntity<Boolean> updateSettings(@RequestBody @ApiParam("description") List<Settings> settings) throws ApiException {
        // unreachable code when there is no body
    }
}

Звоните с curl :

curl -X POST \
  BACKEND_URL/settings \
  -H 'Authorization: ACCESS_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '[{"id":123,"settings":"SETTINGS"}]'

1 Ответ

0 голосов
/ 29 октября 2019

Возможно, вам нужно отправить данные в части тела, используя строковый формат (не в формате массива), можете попробовать, используя приведенный ниже код -

const data = [{"id":123,"settings":"SETTINGS"}];
....

axios.post(endpoint, JSON.stringify(data), { headers, params })
....
...