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

Spring Boot项目返回DTO时id与itemName字段为null如何解决?

问题原因

  1. 业务逻辑方向错误:你需要返回Item列表对应所属用户信息,但你在getAllItems方法中查询的是用户表userRepository.findAll(),全程没有用到注入的itemRepository,根本没有从数据库查询任何Item数据。
  2. DTO转换逻辑完全错误:
    • 你在itemsOwnedByUserDto方法中自行new了空的Item对象,该对象没有从数据库取值,id和name字段自然为null
    • ModelMapper用法错误:modelMapper.map方法第一个参数需要传入待转换的源对象实例,你传入的是Item.class类对象,无法得到有效映射结果
  3. 字段名不匹配:你期望返回的JSON字段为name、ownerUsername,但你的DTO当前字段为itemName、ownerName,序列化后字段名和预期不符。
  4. Item实体类缺少必要注解:你贴出的Item代码开头没有标注@Entity和@Table,会导致JPA无法正确映射数据库表。

修复步骤

1. 补全Item实体类注解

@Entity
@Table(name = "items")
public class Item {
    // 原有Item代码保持不变即可
}

提示:如果查询Item时出现关联User为空的问题,可以在user字段上修改注解为@ManyToOne(fetch = FetchType.EAGER),开启立即加载关联的用户数据。

2. 修正Service层逻辑

@Service
public class ItemServiceImp  {

    @Autowired
    private ItemRepository itemRepository;

    @Autowired
    private ModelMapper modelMapper;


    public List<ItemsOwnedByUserDto> getAllItems() {
        // 查询所有Item数据而非用户数据
        return itemRepository.findAll()
                .stream()
                .map(this::convertItemToDto)
                .collect(Collectors.toList());
    }


    private ItemsOwnedByUserDto convertItemToDto(Item item) {
        ItemsOwnedByUserDto dto = new ItemsOwnedByUserDto();
        // 从数据库查询到的item对象取值
        dto.setId(item.getId());
        dto.setName(item.getName());
        dto.setOwnerId(item.getUser().getId());
        dto.setOwnerUsername(item.getUser().getUserName());
        return dto;
    }
}

3. 对齐DTO字段名

修改你的ItemsOwnedByUserDto类的字段,和预期输出对齐:

public class ItemsOwnedByUserDto {
    private Long id;
    // 将原来的private String itemName; 修改为
    private String name;
    private Long ownerId;
    // 将原来的private String ownerName; 修改为
    private String ownerUsername;
    
    // 对应get、set方法同步修改即可
}

如果你不想修改DTO字段名,也可以在字段上加@JsonProperty注解指定序列化后的名称:

@JsonProperty("name")
private String itemName;
@JsonProperty("ownerUsername")
private String ownerName;

修复完成后即可得到你预期的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:54:01