自定义 SELECT @Query json 键
Custom SELECT @Query json keys
我正在执行 JPQL 查询,类似这样
@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
对象,我 select 来自 UserFlight
和 Flight
对象的值,并将它们 return 给用户作为 json.
首先,我认为将 List<UserFlight>
用作 return 类型是错误的(即使它有效)因为从技术上讲我没有 return 完整 UserFlight
对象。正确的?也许我应该切换到 List<Object>
.
第二件事,我希望 json returned 给用户包含键名。目前我得到 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"
]
]
知道如何获取键名和值吗?我应该在从存储库收到 List<Object>
后手动构建 json 还是有更简单的方法?
我是这样称呼的 getUserFlights
@RequestMapping(value = "/user_flights", method = RequestMethod.POST) List<UserFlight> getUserFlights() {
return userFlightDao.getUserFlights(new Long(1));
}
如果您只需要 UserFlight 的列子集,则需要创建实体 UserFlight
的轻量级版本,将其命名为 UserFlightLight
。 Return 此实体用于上述查询。这可能需要一些工作,但确实可以帮助您避免返回对象类型时可能遇到的所有其他问题。
我正在执行 JPQL 查询,类似这样
@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
对象,我 select 来自 UserFlight
和 Flight
对象的值,并将它们 return 给用户作为 json.
首先,我认为将 List<UserFlight>
用作 return 类型是错误的(即使它有效)因为从技术上讲我没有 return 完整 UserFlight
对象。正确的?也许我应该切换到 List<Object>
.
第二件事,我希望 json returned 给用户包含键名。目前我得到 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"
]
]
知道如何获取键名和值吗?我应该在从存储库收到 List<Object>
后手动构建 json 还是有更简单的方法?
我是这样称呼的 getUserFlights
@RequestMapping(value = "/user_flights", method = RequestMethod.POST) List<UserFlight> getUserFlights() {
return userFlightDao.getUserFlights(new Long(1));
}
如果您只需要 UserFlight 的列子集,则需要创建实体 UserFlight
的轻量级版本,将其命名为 UserFlightLight
。 Return 此实体用于上述查询。这可能需要一些工作,但确实可以帮助您避免返回对象类型时可能遇到的所有其他问题。