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

Spring Boot查询过滤器如何捕获错误返回空列表而非404状态码

Spring Boot查询接口空匹配返回逻辑调整方案

问题场景

基于Spring Boot开发的光伏板位置查询过滤器,支持通过externalId或名称模糊检索,输入合法过滤条件时可正常返回结果,输入无匹配的过滤条件时接口返回404错误,期望调整为匹配不到结果时返回空列表。

现有代码实现

Controller层

@Override
public ResponseEntity<List<SolarPanelLocation>> getSolarPanelLocationsByIdAndName(String solarPanelNameAndExternalId) {
    return ResponseEntityBuilderUtils.ok(solarPanelService.getSolarPanelFilterByExternalIdAndSolarPanelName(solarPanelNameAndExternalId));
}

Service层

@Override
public List<SolarPanelLocation> getSolarPanelFilterByExternalIdAndSolarPanelName(String solarPanelNameAndExternalId) {

        if (solarPanelNameAndExternalId == null) {
            throw new MissingValueException("The externalId or solarPanelName are required");
        }
        final List<SolarPanelLocationEntityView> solarPanelLocationEntityListFilter = solarPanelLocationDAO.filterSolarPanelList(
                solarPanelNameAndExternalId);
        if (solarPanelLocationEntityListFilter == null) {
            throw new NoSuchElementFoundException("Structure Group Location list not available");
        }
        if (solarPanelLocationEntityListFilter.isEmpty()) {
            throw new NoSuchElementFoundException("Solar Panel Location list not available");
        }
        return solarPanelLocationMapper.map(solarPanelLocationEntityListFilter);
    }

DAO层查询逻辑

@Query("SELECT d FROM SolarPanelLocationEntityView d WHERE d.externalId LIKE %:#{#filterCriteria}% OR lower(d.solarPanelName) LIKE lower(concat('%',:filterCriteria,'%')) ")
List<SolarPanelLocationEntityView> filterSolarPanelList(@Param("filterCriteria") String filterCriteria);

原错误返回结果

{
    "status": 404,
    "message": "Solar Panel Location list not availablen"
}

修复方案

问题根源是Service层判断查询结果为空列表时主动抛出了NoSuchElementFoundException,该异常被全局异常处理器映射为404状态码返回。只需修改空列表判断逻辑,不再抛出异常,直接返回空列表即可:

// 删除原有抛异常逻辑,替换为返回空列表
if (solarPanelLocationEntityListFilter.isEmpty()) {
    return List.of();
}

修改后无匹配结果时接口会直接返回200状态码+空列表,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:36:02