Как отправить Mono of ResponseEntity класса с атрибутом Flux / Mono - PullRequest
0 голосов
/ 25 июня 2018

Я создаю API с Spring webflux для измерения времени ответа по сравнению с Spring MVC с тем же кодом.

В Spring MVC я отправляю ответ с ResponseEntity<HttpResponse>.

public class HttpResponse {
    private Date timestamp = new Date();
    private int status;
    private boolean error;
    private String message;
    private Object data;

    public Date getTimestamp() {
        return timestamp;
    }
    public int getStatus() {
        return status;
    }

    public boolean isError() {
        return error;
    }

    public String getMessage() {
        return message;
    }

    public Object getData() {
        return data;
    }
    public HttpResponse() {
        super();
    }
    public HttpResponse(int status, boolean error, String message, Object data) {
        super();
        this.status = status;
        this.error = error;
        this.message = message;
        this.data = data;
    }
}

И это мой оператор возврата в методе requestMapping:

return new ResponseEntity<HttpResponse>(new HttpResponse(httpStatus.value(), error, message, responseObject), httpStatus);

httpStatus является экземпляром HttpStatus

ошибка - логическое

сообщениеa String

responseObject - это объект

Это прекрасно работает, я получаю правильный ответ.

В Spring webflux я использовал Mono<ResponseEntity<HttpResponse>> вместо ResponseEntity<HttpResponse> и это оператор возврата в методе requestMapping.

return Mono.just(new ResponseEntity<HttpResponse>(new HttpResponse(httpStatus.value(), error, message, responseObj), httpStatus));

это дает этот ответ

{
    "timestamp": "2018-06-25T16:18:09.949+0000",
    "status": 200,
    "error": false,
    "message": "23",
    "data": {
        "scanAvailable": true
    }
}

Я передал Mono в responseObj

1 Ответ

0 голосов
/ 26 июня 2018

Spring WebFlux будет разрешать только издатели верхнего уровня - вы должны создать такой конвейер.

В вашем случае у вас должно быть что-то вроде:

Mono<User> user = …
Mono<ResponseEntity> response = user.map(u -> new ResponseEntity(new HttpResponse(…, u));
return response;
...