Почему я получаю нули, зарегистрированные в моем dto?

#java #database #spring-boot #spring-mvc #dto

Вопрос:

Это небольшой проект с весенней загрузкой.

Мне нужно распечатать :

 [   {   "id":3,   "name":”Item1”,   "ownerId":1,   “ownerUsername”:"User1"   }  ]  

вместо этого я получаю:

 [{"id":null,"itemName":null,"ownerName":"ivan","ownerId":1}]  

Вот моя пользовательская сущность:

 @Entity @Table(name = "users") public class User {   @Id  @GeneratedValue(strategy = GenerationType.AUTO)  private Long id;   @Column(name = "username")  private String userName;   @Column(name = "account_num")  private int account;   @Column(name = "is_seller")  private boolean isSeller;   public User() {  }   public Long getId() {  return id;  }   public void setId(Long id) {  this.id = id;  }   public String getUserName() {  return userName;  }   public void setUserName(String userName) {  this.userName = userName;  }   public int getAccount() {  return account;  }   public void setAccount(int account) {  this.account = account;  }   public boolean isSeller() {  return isSeller;  }   public void setSeller(boolean seller) {  isSeller = seller;  } }  

Вот моя сущность элемента:

 @Id  @GeneratedValue(strategy = GenerationType.AUTO)  private Long id;   @Column(name = "item_name")  private String name;   @ManyToOne  private User user;   public Item() {  }    public Long getId() {  return id;  }   public void setId(Long id) {  this.id = id;  }   public String getName() {  return name;  }   public void setName(String name) {  this.name = name;  }   public User getUser() {  return user;  }   public void setUser(User userId) {  this.user = userId;  } }  

Here is my ItemService:

 @Service public class ItemServiceImp {   @Autowired  private ItemRepository itemRepository;   @Autowired  private UserRepository userRepository;   @Autowired  private ModelMapper modelMapper;    public Listlt;ItemsOwnedByUserDtogt; getAllItems() {  return userRepository.findAll()  .stream()  .map(this::itemsOwnedByUserDto)  .collect(Collectors.toList());  }    public ItemsOwnedByUserDto itemsOwnedByUserDto(User user) {  ItemsOwnedByUserDto dto =  modelMapper.map(Item.class, ItemsOwnedByUserDto.class);  Item item = new Item();   dto.setId(item.getId());  dto.setItemName(item.getName());  dto.setOwnerId(user.getId());  dto.setOwnerName(user.getUserName());  return dto;  } }  

Вот мой контроллер calss:

 @RestController public class ItemViewController {   @Autowired  private ItemServiceImp itemServiceImp;    @GetMapping("/users-items")  public Listlt;ItemsOwnedByUserDtogt; viewItems(){  return itemServiceImp.getAllItems();  } }  

Я создал строки в базе данных, но, похоже, я не могу извлечь их внутри службы.Это таблица товары

А это таблица пользователи

Ответ №1:

Вы создаете совершенно новый Item объект, прежде чем задавать свойства в своем DTO. Вот почему вы получаете id и itemName как ноль.

 public ItemsOwnedByUserDto itemsOwnedByUserDto(User user) {  ItemsOwnedByUserDto dto =  modelMapper.map(Item.class, ItemsOwnedByUserDto.class);  Item item = new Item();   dto.setId(item.getId()); // item.getId() is null  dto.setItemName(item.getName()); // item.getName() is null  dto.setOwnerId(user.getId());  dto.setOwnerName(user.getUserName());  return dto; }