jdbcTemplate - конвертировать данные из столбца JSON - PullRequest
0 голосов
/ 23 февраля 2019

Инструменты: Spring Booot v2.1.3.RELEASE, MySQL 5.7

У меня есть таблица со столбцом типа JSON с именем "properties".Я использую метод jdbcTemplate.queryForList (sql) для чтения из этой таблицы.Служба отдыха возвращает что-то вроде этого:

[
  {
    "id": 1,
    "name": "users",
    "properties": "{\"prop1\": \"value1\"}",
    "description": "smpl descr1",
    "log_enabled": false
  },
  {
    "id": 2,
    "name": "members",
    "properties": null,
    "description": "sample description 2",
    "log_enabled": true
  }
]

Как видите, объект «свойства» имеет тип String.Как заставить jdbcTemplete преобразовывать данные из столбца JSON в JSON вместо String?

Ожидаемый результат:

[
  {
    "id": 1,
    "name": "users",
    "properties": {
      "prop1": "value1"
    },
    "description": "smpl descr1",
    "log_enabled": false
  },
  {
    "id": 2,
    "name": "members",
    "properties": null,
    "description": "sample description 2",
    "log_enabled": true
  }
]

1 Ответ

0 голосов
/ 23 февраля 2019

Извините, что JdbcTemplete не имеет такой функции.Вы должны преобразовать строку JSON в объект java самостоятельно, используя вашу любимую библиотеку JSON.

Например, в случае Jackson вы можете преобразовать любую строку JSON в карту, используя:

ObjectMapper mapper = new ObjectMapper();
String json = "{\"prop1\": \"value1\" , \"prop2\": 123}";

Map<String,Object> result = mapper.readValue(json,new TypeReference<Map<String,Object>>() {});

result.get("prop1") // "value1"
result.get("prop2") // 123
...