首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring反应性返回scanAvailable和预取而不是对象

Spring反应性返回scanAvailable和预取而不是对象
EN

Stack Overflow用户
提问于 2022-01-25 09:49:17
回答 1查看 577关注 0票数 0

我有一个REST,它使用Spring开发,如下所示,当它返回响应时,它确实有scanAvailable和预取,而不是对象细节。对于findAllEmployment、getAllWorkerAddressDetailsByWorkerId下面使用的方法,我们有各自的API,并且它确实返回了正确的响应。当我把它们结合在一起的时候,不知道是怎么回事。

WorkerDTO.java

代码语言:javascript
复制
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Data
@ToString(includeFieldNames = true)
public class WorkerDTO {
    
    ...

    private Flux<WorkerAddressDTO> workerAddress;

}

ServiceImpl.java

代码语言:javascript
复制
@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);
  });
}

目前的答复:

代码语言:javascript
复制
[
    {
        "xyz": "abc",
        "workerAddress": {
            "scanAvailable": true,
            "prefetch": -1
        }
    },
    {
       "xyz": "qwe",
        "workerAddress": {
            "scanAvailable": true,
            "prefetch": -1
        }
    } 
]

预期答复:

代码语言:javascript
复制
[
    {
        "xyz": "abc",
        "workerAddress": {
            "key1": "value1",
            "key2": "value2"
        }
    },
    {
       "xyz": "qwe",
        "workerAddress": {
            "key1": "value1",
            "key2": "value2"
        }
    } 
]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-25 15:19:10

你需要做些改变。首先,将Flux放到WorkerDTO中,并将其替换为List,如下所示:

代码语言:javascript
复制
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Data
@ToString(includeFieldNames = true)
public class WorkerDTO {
    
    ...

    private List<WorkerAddressDTO> workerAddress;
}

然后,您需要按以下方式更改ServiceImpl代码:

代码语言:javascript
复制
@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));
    });
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70846501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档