я делаю запрос JPQL, что-то вроде этогоПользовательские ВЫБРАТЬ @Query JSON ключи
@Repository
@Transactional
public interface UserFlightDao extends CrudRepository<UserFlight, Long> {
@Query("SELECT uf.departureGps, uf.flight.id, uf.flight.flightNumber, uf.flight.airline.name, uf.flight.departureDate, " +
"uf.flight.departureAirport.name FROM UserFlight uf WHERE user.id=?1")
List<UserFlight> getUserFlights(Long userId);
}
UserFlight
содержит Flight
объект, я выбираю значения из обоих UserFlight
и Flight
объектов и вернуть их пользователю в формате JSON ,
Первое, что я считаю неправильным использовать List<UserFlight>
как возвращаемый тип (хотя он работает), потому что технически я не возвращаю полностью UserFlight
объектов. Правильно? Может быть, я должен переключиться на List<Object>
.
Во-вторых, я хочу, чтобы json вернулся к пользователю, чтобы содержать имена ключей. В настоящее время я получаю json, который содержит массив объектов без их соответствующих имен ключей. Пример ответа:
[
[
"sdf",
1,
234234,
"American Airline",
{
"dayOfMonth": 13,
"dayOfWeek": "TUESDAY",
"dayOfYear": 286,
"monthValue": 10,
"month": "OCTOBER",
"year": 2015,
"hour": 18,
"minute": 41,
"nano": 0,
"second": 39,
"chronology": {
"id": "ISO",
"calendarType": "iso8601"
}
},
"dummy airport"
],
[
"asfsaf",
1,
234234,
"American Airline",
{
"dayOfMonth": 13,
"dayOfWeek": "TUESDAY",
"dayOfYear": 286,
"monthValue": 10,
"month": "OCTOBER",
"year": 2015,
"hour": 18,
"minute": 41,
"nano": 0,
"second": 39,
"chronology": {
"id": "ISO",
"calendarType": "iso8601"
}
},
"dummy airport"
]
]
Любая идея, как получить ключевые имена вместе со значениями? Должен ли я создать json вручную после полученияиз репозитория или есть более простой способ?
Это, как я называю getUserFlights
@RequestMapping(value = "/user_flights", method = RequestMethod.POST) List<UserFlight> getUserFlights() {
return userFlightDao.getUserFlights(new Long(1));
}
Спасибо за подсказку. Я создал класс для хранения значений, как вы предложили (класс не имеет аннотаций, только сеттеры/геттеры для подмножества столбцов), и я использовал 'SELECT new com.foo.bar.model.UserFlightLight (arg1, arg2..etc) 'в запросе jpql, и все хорошо. – prettyvoid