如何发送具有 Flux/Mono 属性的 class 的 ResponseEntity 的 Mono

How to send Mono of ResponseEntity of a class which has Flux/Mono attribute

我正在用 Spring webflux 创建 API 来测量与具有相同代码的 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 语句:

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

httpStatus is instance of HttpStatus

error is a boolean

message is a String

responseObject is a Object

这很好用,我得到了正确的回应。

Spring webflux中,我使用了Mono<ResponseEntity<HttpResponse>>而不是ResponseEntity<HttpResponse> 这是 requestMapping 方法中的 return 语句。

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
    }
}

我在 responseObj

中传递了一个 Mono

Spring WebFlux 只会解析顶级发布者 - 创建这样的管道由您决定。

在你的情况下,你应该有这样的东西:

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