You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring端点查询数据库无数据时,如何返回空NotificationNewDTO对象?

实现返回空NotificationNewDTO的Spring端点

当然可以实现这个需求!你只需要调整原代码中处理空结果的逻辑,把返回404的逻辑替换成返回一个空的NotificationNewDTO实例即可,同时保持200的成功状态码。

修改后的代码示例

@GetMapping("/notification/{id}") 
public ResponseEntity<NotificationNewDTO> getNotificationByTransactionId(@PathVariable Integer id) { 
    // 从数据库查询并映射为DTO,无数据时返回空DTO
    NotificationNewDTO responseDto = notificationService 
        .findByTransactionId(id) 
        .map(notification -> NotificationNewDTO.builder() 
            .id(notification.getId()) 
            .status(notification.getStatus()) 
            .updated_at(notification.getUpdated_at()) 
            .build() 
        ) 
        .orElse(NotificationNewDTO.builder().build()); // 关键:无数据时生成空DTO
    
    return ResponseEntity.ok(responseDto);
}

关键调整说明

  • 明确返回类型:把原来的ResponseEntity<?>改为ResponseEntity<NotificationNewDTO>,让接口契约更清晰,避免类型通配符带来的模糊性。
  • 替换空结果处理逻辑:用orElse()替代原代码中的orElseGet(() -> notFound().build()),当findByTransactionId(id)返回空Optional时,通过builder模式创建一个空的NotificationNewDTO对象。
  • 统一返回状态:不管数据库中是否存在对应数据,都返回200状态码和对应的DTO(有数据则返回填充后的DTO,无数据则返回空DTO)。

另一种链式写法(更简洁)

如果你偏好保持链式调用的风格,也可以这样写:

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

这两种写法都能满足你的需求,核心思路就是用orElse提供空DTO实例,而不是返回404响应。

内容的提问来源于stack exchange,提问作者Peter Penzov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:07:02