Как десериализовать Map из json

 
 
 
Сообщения:200
Spring Rest Controller.
Есть сущность:
@Entity
@Table(name = "cards")
public class ReaderCard {

	@Id
	private Long id;

	@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
	@MapsId
	@JoinColumn(name = "id")
	private User user;


	@ElementCollection(fetch = FetchType.EAGER)
	@CollectionTable(name = "card_books", joinColumns = @JoinColumn(name = "card_id"))
	@MapKeyJoinColumn(name = "book_id")
	@Column(name = "date")
	private Map<Book, LocalDate> books = new HashMap<>();

Вопрос. В каком виде должна передаваться эта сущность в json, чтобы из неё можно было получить объект Java?
 
 
Сообщения:9932
Вот прям как есть - такое не представить в JSON'e. Ключ в мапе должен быть примитивом. Соответственно получается такая схема:
[{"bookId": "date"}, {"bookId": "date"}]
Пример:
[{"1": "12012001"}, {"2": "12031990"}]
Ну и при десериализации нужно либо создавать объект Book через new, либо доставать его из БД.

PS: JSON как правило мапят не на Entity, а на DTO. Твоя Entity и так перегружена аннотациями.
Изменен:26 мар 2020 06:10
 
 
Сообщения:200
[{"bookId": "date"}, {"bookId": "date"}] - это ведь по сути список объектов? Не карта же?
Там вообще потом не так просто будет RestController всё это дело разобрать. Про DTO надо подумать, действительно, тут они уместны.
 
 
Сообщения:9932
Нет, список объектов это:
{
  "bookId": 1,
  "date": "12012001"
}
Т.е. тут два поля с явно определенными именами - bookId, date. А когда "название" поля динамическое (в данном случае это ID объекта) - то это мапа. А фигурные скобочки конечно и там, и там в JSON'e есть.
vallball:
Там вообще потом не так просто будет RestController всё это дело разобрать.
А что там непростого?
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет