Spring WebFlux - тип содержимого «application / xml» не поддерживается для bodyType = org.springframework.web.multipart.MultipartFile - PullRequest
1 голос
/ 11 апреля 2019

Я использую spring-webflux и хочу загрузить файлы .... все прекрасно работает только с spring-web, но когда дело доходит до webflux, я понятия не имею, что не так.

Будьте осторожны в разнице ... я использую:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-webflux</artifactId>
    </dependency>

Итак, скажем, у нас есть @RestController, для Spring Web он работает как шарм:

@PostMapping(value = "/uploadFile")
public Response uploadFile(@RequestParam("file") MultipartFile file) {

}

Теперь попытка сделать то же самое с Spring-webflux выдает следующую ошибку:

{
    "timestamp": "2019-04-11T13:31:01.705+0000",
    "path": "/upload",
    "status": 400,
    "error": "Bad Request",
    "message": "Required MultipartFile parameter 'file' is not present"
}

Я нашел из случайного вопроса stackoverflow, что мне нужно использовать @RequestPart вместо @RequestParam, но теперь я получаю приведенную ниже ошибку, и у меня нет понятия, почему это происходит?

Ошибка ниже:

{
    "timestamp": "2019-04-11T12:27:59.687+0000",
    "path": "/uploadFile",
    "status": 415,
    "error": "Unsupported Media Type",
    "message": "Content type 'application/xml' not supported for bodyType=org.springframework.web.multipart.MultipartFile"
}

Даже при .txt файлах выдает ту же ошибку:

{
    "timestamp": "2019-04-11T12:27:59.687+0000",
    "path": "/uploadFile",
    "status": 415,
    "error": "Unsupported Media Type",
    "message": "Content type 'application/xml' not supported for bodyType=org.springframework.web.multipart.MultipartFile"
}

Ниже приведена Конфигурация почтальона n, которая довольно прямолинейна, я просто звоню с почтовым запросом и изменяю только тело, как показано на рисунке.

enter image description here

Кстати, я добавил нужные свойства и в application.properties :)

## MULTIPART (MultipartProperties)
# Enable multipart uploads
spring.servlet.multipart.enabled=true
# Threshold after which files are written to disk.
spring.servlet.multipart.file-size-threshold=2KB
# Max file size.
spring.servlet.multipart.max-file-size=200MB
# Max Request Size
spring.servlet.multipart.max-request-size=215MB

1 Ответ

2 голосов
/ 11 апреля 2019

Как документация sais:

DefaultServerWebExchange использует сконфигурированный HttpMessageReader<MultiValueMap<String, Part>> для анализа содержимого multipart / form-data в MultiValueMap.

Для анализамногочастные данные в потоковом режиме, вы можете использовать Flux, возвращенный из HttpMessageReader.

С помощью нескольких слов вам нужно сделать что-то вроде этого:

    @RequestMapping(path = "/uploadFile", method = RequestMethod.POST, 
        consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public Flux<String> uploadFile(@RequestBody Flux<Part> parts) {
    //...
    }

Посмотрите на этот пример

...