Конвертация json из Postgres в поле Java класса типа HashMap
В бд есть табличка
CREATE TABLE links
(
link_id BIGSERIAL PRIMARY KEY,
url VARCHAR(2048) UNIQUE NOT NULL,
info JSON NOT NULL
);
И соответствующий ей DTO
@Data
@NoArgsConstructor
@AllArgsConstructor
@Valid
public class Link {
private long linkId;
@NotBlank
private String url;
@NotNull
private Map<String, String> info;
}
С бд я общаюсь через JdbcTemplate. Подскажите, как лучше всего смапить поле JSON info из таблички в Map<> info в классе Link? Не смог найти соответствующей аннотации?
Ответы (1 шт):
Автор решения: TaranenkoAnt
→ Ссылка
JdbcTemplate не умеет автоматически маппить JSON в Map, поэтому можно подключить jackson и сделать что-то вроде этого:
import com.fasterxml.jackson.databind.ObjectMapper;
String jsonString = jdbcTemplate.queryForObject("SELECT info FROM links WHERE link_id = ?", String.class, linkId);
ObjectMapper objectMapper = new ObjectMapper();
try {
Map<String, String> infoMap = objectMapper.readValue(jsonString, new TypeReference<Map<String,String>>(){});
Link link = new Link();
link.setLinkId(linkId);
link.setUrl(url);
link.setInfo(infoMap);
} catch(IOException e) {
logger.error("", e)
}