如果未在数据库中找到数据,则返回空对象

时间:2019-07-19 11:02:02

标签: java spring rest spring-boot spring-data-jpa

我想实现Spring端点来从数据库获取数据。

@GetMapping("/notification/{id}")
    public ResponseEntity<?> getNotificationByTransactionId(@PathVariable Integer id) {
        return notificationService
                .findByTransactionId(id)
                .map(g -> NotificationNewDTO.builder()              
                        .id(g.getId()) 
                        .status(g.getStatus())                          
                        .updated_at(g.getUpdated_at())              
                      .build()
                )               
                .map(ResponseEntity::ok)
                .orElseGet(() -> notFound().build());
    }

如果发现数据库中有注释,是否有某种方法可以只返回空的NotificationNewDTO对象?

1 个答案:

答案 0 :(得分:1)

我将分两步进行操作:计算DTO(检索的或默认的)并返回DTO。
它使事情更具可读性。

提取Optional<NotificationNewDTO>并在dto上调用ResponseEntity.ok()时提供默认值:

NotificationNewDTO dto  = 
     notificationService
    .findByTransactionId(id) 
    .map(g -> NotificationNewDTO.builder()   // Optional<NotificationNewDTO>
            .id(g.getId()) 
            .status(g.getStatus())                          
            .updated_at(g.getUpdated_at())              
          .build()
     )               
    .orElse(NotificationNewDTO.ofDefaultValue()); // change here

return ResponseEntity.ok(dto); // change here 

当然可以一次完成它,但是不清楚:

return 
    ResponseEntity.ok(
         notificationService
        .findByTransactionId(id) 
        .map(g -> NotificationNewDTO.builder()  
                .id(g.getId()) 
                .status(g.getStatus())                          
                .updated_at(g.getUpdated_at())              
              .build()
         )               
        .orElse(NotificationNewDTO.ofDefaultValue())
    )