Конвертация 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)
}
→ Ссылка