Java Spring Boot + Mysql - возвращает ответ Json (ключ-значение), если результат запроса mysql не соответствует ни одной модели, соответствующей какой-либо таблице базы данных - PullRequest
0 голосов
/ 27 мая 2019

Я новичок в Spring Boot и мне нужна помощь в решении проблемы.

В репозитории Spring Boot я получаю данные из базы данных mysql.

У меня есть два типа возвращаемых значений из хранилища.

a) Возвращаемое значение - это Список моделей, который я определил с помощью тега @Entity, и эта модель соответствует таблице в MySQL. Пример: ZoneModel в приведенном ниже коде.

@Query(value = "select c from ZoneModel c where c.cityId = ?1")
public List<ZoneModel> getZonesInCity(String cityId);

В этом случае мой ответ:

[
  {
    "id": "1",
    "cityId": "1",
    "name": "Phoenix Marketcity",
    "type": "Mall",
    "locationLat": "12.9970372",
    "locationLong": "77.6944303"
  }
]

Ответом является пара ключ-значение json.

b) Возвращаемое значение не соответствует напрямую какой-либо модели или списку любой модели. Имеются дополнительные столбцы.

@Query(value = "select id, cityId, name, type, locationLat, locationLong," +
        " (6371 * acos (\n" +
        "cos ( radians(?2) )\n" +
        "* cos( radians( locationLat ) )\n" +
        "* cos( radians( locationLong ) - radians(?3) )\n" +
        "+ sin ( radians(?2) )\n" +
        "* sin( radians( locationLat ) )\n" +
        ")) as distanceInKms\n" +
        "from zone where cityId = ?1\n" +
        "group by id\n" +
        "having distanceInKms < 150\n" +
        "order by distanceInKms\n", nativeQuery = true)

public List<Object[]> getZoneSuggestions(String cityId, String latitude, String longitude, Pageable pageable);

В этом случае ответом будет:

[
  [
    "1",
    "1",
    "Phoenix Marketcity",
    "Mall",
    "12.9970372",
    "77.6944303",
    0.19478083559705964
  ]
]

В ответе нет ключей, соответствующих именам столбцов.

Как я могу вернуть ответы пары ключ-значение с ключами в качестве имен столбцов даже в тех случаях, когда возвращаемое значение из репозитория не точно совпадает ни с одной моделью?

1 Ответ

1 голос
/ 27 мая 2019
public List<Object[]> getZoneSuggestions(String cityId, String latitude, String longitude, Pageable pageable);

Вы пытаетесь сопоставить результат с List of Object arrays.Так что Spring сделал то, что вы сказали, и отобразил список массивов объектов.

Попробуйте вместо этого:

public List<Map<String, Object>> getZoneSuggestions(String cityId, String latitude, String longitude, Pageable pageable);
...