#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; }