如何发送具有 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;
我正在用 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
中传递了一个 MonoSpring WebFlux 只会解析顶级发布者 - 创建这样的管道由您决定。
在你的情况下,你应该有这样的东西:
Mono<User> user = …
Mono<ResponseEntity> response = user.map(u -> new ResponseEntity(new HttpResponse(…, u));
return response;