RestController с Spring WebFlux: обязательный параметр отсутствует - PullRequest
0 голосов
/ 07 мая 2018

Я написал демо Rest Controller с Spring WebFlux, он не может работать правильно, исходный код выглядит следующим образом:

@RestController
public class Demo{
    @PostMapping(value = "test2")
    public Integer getHashCode(@RequestParam("parameters") String parameters){
        return parameters.hashCode();
    }
}

Я использовал Почтальон, чтобы проверить это, возвращая:

{
    "timestamp": "2018-05-07T07:19:05.303+0000",
    "path": "/test2",
    "status": 400,
    "error": "Bad Request",
    "message": "Required String parameter 'parameters' is not present"
}

enter image description here

зависимости:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.1.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
</properties>

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

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>io.projectreactor</groupId>
        <artifactId>reactor-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

Я написал ту же самую демонстрацию контроллера с загрузкой Spring (v2.0.1.RELEASE), она может работать правильно. Почему он не может работать правильно в Spring Webflux?

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Можете ли вы опубликовать запрос как x-www-form-urlencoded вместо данных формы? Я предполагаю, что Spring webflux принимает только параметры запроса, которые являются параметрами запроса, а не данными формы.

Обновление: Я только что попробовал один и тот же код с webflux и java 10. Я могу четко получить правильный ответ .. Так что webflux и данные формы не имеют никакого влияния.

post-request

0 голосов
/ 07 мая 2018

Как указано в справочной документации , между приложениями на основе сервлетов (Spring MVC) и Spring WebFlux существует небольшое различие в отношении параметров запроса.

В Spring WebFlux @RequestParam будет привязывать только параметры запроса. В вашем случае ваш HTTP-запрос не предоставляет такой параметр запроса, а сигнатура метода не помечает его как необязательный.

Если посмотреть на ваш снимок экрана Postman, похоже, что вы намеревались связать данные формы HTTP с этим аргументом, тогда вам, вероятно, следует взглянуть на объекты команды .

...