我有一个REST,它使用Spring开发,如下所示,当它返回响应时,它确实有scanAvailable和预取,而不是对象细节。对于findAllEmployment、getAllWorkerAddressDetailsByWorkerId下面使用的方法,我们有各自的API,并且它确实返回了正确的响应。当我把它们结合在一起的时候,不知道是怎么回事。
WorkerDTO.java
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Data
@ToString(includeFieldNames = true)
public class WorkerDTO {
...
private Flux<WorkerAddressDTO> workerAddress;
}ServiceImpl.java
@Override
public Flux<WorkerDTO> method() {
Flux<EmploymentDTO> employmentDTOFlux = findAllEmployment();
Flux<WorkerDTO> workerDTOFlux = getWorkerDetailsWithEmploymentStatus(employmentDTOFlux);
return workerDTOFlux.flatMap(workerDTO -> {
workerDTO.setWorkerAddress(getAllWorkerAddressDetailsByWorkerId(workerDTO.getWorkerId()).map(workerAddressDTO -> workerAddressDTO));
return Flux.just(workerDTO);
});
}目前的答复:
[
{
"xyz": "abc",
"workerAddress": {
"scanAvailable": true,
"prefetch": -1
}
},
{
"xyz": "qwe",
"workerAddress": {
"scanAvailable": true,
"prefetch": -1
}
}
]预期答复:
[
{
"xyz": "abc",
"workerAddress": {
"key1": "value1",
"key2": "value2"
}
},
{
"xyz": "qwe",
"workerAddress": {
"key1": "value1",
"key2": "value2"
}
}
]发布于 2022-01-25 15:19:10
你需要做些改变。首先,将Flux放到WorkerDTO中,并将其替换为List,如下所示:
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Data
@ToString(includeFieldNames = true)
public class WorkerDTO {
...
private List<WorkerAddressDTO> workerAddress;
}然后,您需要按以下方式更改ServiceImpl代码:
@Override
public Flux<WorkerDTO> method() {
Flux<EmploymentDTO> employmentDTOFlux = findAllEmployment();
Flux<WorkerDTO> workerDTOFlux = getWorkerDetailsWithEmploymentStatus(employmentDTOFlux);
return workerDTOFlux.flatMap(workerDTO -> {
return getAllWorkerAddressDetailsByWorkerId(workerDTO.getWorkerId()).collectList()
.map(workerAddresses -> workerDTO.setWorkerAddress(workerAddresses));
});
}https://stackoverflow.com/questions/70846501
复制相似问题