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

Spring无法将JSON数组转为DTO中List<Long>,请求排查解决

Spring JSON列表转DTO的List问题解答

Spring默认依赖Jackson作为JSON处理工具,完全支持将JSON中的元素列表转换为DTO中的List<Long>类型,以下是常见错误点及排查方案:

常见错误排查

  • DTO字段定义错误
    检查DTO中的字段是否明确声明为List<Long>,而非List<String>或其他类型;确保字段有对应的getter/setter方法(可通过Lombok的@Data注解自动生成);如果JSON键名和DTO字段名不一致,需添加@JsonProperty("json_key_name")指定映射关系。

  • JSON格式不匹配
    确认请求的JSON列表是数字数组,例如:

    {"targetIds": [123, 456, 789]}
    

    若JSON中是字符串数组(如["123","456"]),Jackson默认不会自动将字符串转Long,此时要么修改JSON格式为数字数组,要么在DTO字段上添加自定义反序列化器,或者后续手动转换。

  • 请求头配置错误
    确保请求的Content-Type设置为application/json,如果使用form-data或x-www-form-urlencoded格式,Spring无法正确解析JSON结构,会导致转换失败。

  • Jackson自定义配置冲突
    若项目中自定义了ObjectMapper配置,检查是否禁用了数字类型自动转换,比如设置了disable(DeserializationFeature.FAIL_ON_NUMBERS_FOR_ENUMS)等可能影响类型转换的配置,需调整配置保留默认的数字到Long的转换逻辑。

  • 嵌套对象结构错误
    如果List<Long>是嵌套在多层对象中的,需确保DTO的层级结构和JSON完全对应,没有遗漏或多余的层级。

正确示例

DTO定义

import lombok.Data;
import java.util.List;

@Data
public class IdListDTO {
    // 若JSON键名为"ids",字段名一致则无需额外注解
    private List<Long> ids;
}

控制器方法

@RestController
@RequestMapping("/api")
public class TestController {
    @PostMapping("/receive-ids")
    public String receiveIds(@RequestBody IdListDTO dto) {
        return "接收的ID列表:" + dto.getIds().toString();
    }
}

合法请求JSON

{
  "ids": [1001, 2002, 3003]
}

内容的提问来源于stack exchange,提问作者Макс Тимощенко

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 22:33:18