Flask получает от spring пустое тело запроса Post. Ошибка 400 - PullRequest
0 голосов
/ 07 мая 2020

Я работаю над проектом с весенней загрузкой и flask, который в настоящее время работает на сервере разработки / flask. Мне нужно отправить пост-запрос из весенней загрузки на flask, но все, что я получаю в качестве ответа от flask, - это ошибка 400.

Для пост-запроса я использую следующий код:

@PostMapping("/catOrDog")
    public ResponseEntity<CatOrDogResponse> catOrDog(@RequestHeader HttpHeaders headers,
            @RequestBody CatOrDogRequest catOrDogRequest) {
        String url = "http://localhost:5000/cat_or_dog/predict/";

        RestTemplate restTemplate = new RestTemplate();
        HttpHeaders headersForFlask = new HttpHeaders();
        headersForFlask.setContentType(MediaType.MULTIPART_FORM_DATA);

        Map<String, Object> map = new HashMap<>();
        map.put("images", catOrDogRequest.getImages());

        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        List<MediaType> mediaTypes = new ArrayList<MediaType>();
        mediaTypes.add(MediaType.TEXT_HTML);
        mediaTypes.add(MediaType.APPLICATION_JSON);
        mediaTypes.add(MediaType.MULTIPART_FORM_DATA);
        converter.setSupportedMediaTypes(mediaTypes);
        List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();
        messageConverters.add(converter);
        restTemplate.setMessageConverters(messageConverters);

        HttpEntity<Map<String, Object>> entity = new HttpEntity<>(map, headersForFlask);
        // System.out.println("Entity: " + entity.toString());

        ResponseEntity<CatOrDogResponse> response = restTemplate.postForEntity(url, entity, CatOrDogResponse.class);

        return response;
    }

Мой код в flask для отладки:

@app.route('/cat_or_dog/predict/', methods=['POST'])
def image_classifier_cat_or_dog():   
    print(request.headers)
    print("Items in form:")
    for item in request.form.items():
        print(item)

Это должно напечатать заголовки запроса и все элементы в форме, отправленной весной, но это вывод получаю от flask:

Accept: text/html, application/json, multipart/form-data
Content-Type: multipart/form-data
User-Agent: Java/1.8.0_241
Host: localhost:5000
Connection: keep-alive
Content-Length: 26563


Items in form:
INFO:werkzeug:127.0.0.1 - - [06/May/2020 23:52:10] "POST /cat_or_dog/predict/ HTTP/1.1" 400 -

При отправке почтового запроса с бессонницей все работает нормально.

...