У меня есть запрос, который возвращает таблицу. запрос:
SELECT * FROM vote_votes WHERE poll_id=? ORDER BY option_id ASC
например, когда poll_id равен 1, таблица должна быть:
poll_id | option_id | option_text
-------------------------------------
1 1 one
1 2 two
. . .
. . .
. . .
1 10 ten
Теперь в моем контроллере отдыха я хочу иметь метод, который возвращает вышеуказанный запрос в виде json.something вроде:
@ResponseBody
@RequestMapping(value = "/polls/{id}", method = RequestMethod.GET)
public Poll getOptions(int id) {
return pollDao.getPollOptionsById(id);
}
У меня уже есть POJO с именем Poll, который имеет свойства, такие как poll_id, option_id, option_text, title, description и другие вещи.
что я сделал, это:
private static final String SQL_GET_PollOptions_BY_ID = "SELECT * FROM vote_votes WHERE poll_id=? ORDER BY option_id ASC";
public Poll getPollOptionsById(int id) {
try {
List<Poll> poll = (List<Poll>) jdbcTemplate.query(SQL_GET_PollOptions_BY_ID, new PollOptionsExtractor(), id);
return poll.get(0);
} catch (EmptyResultDataAccessException | IndexOutOfBoundsException e) {
return null;
}
}
private static class PollOptionsExtractor implements ResultSetExtractor {
@Override
public Object extractData(ResultSet rs) throws SQLException, DataAccessException {
Map<Integer, Poll> map = new LinkedHashMap<>();
Poll poll = null;
while (rs.next()) {
int id = rs.getInt("poll_id");
int opt_id = rs.getInt("option_id");
poll = map.get(id);
if (poll == null) {
String opt_text = rs.getString("option_text");
poll = new Poll(id, opt_id, opt_text);
map.put(id, poll);
}
}
return new ArrayList<>(map.values());
}
}
но когда я перехожу на localhost:8080/polls/{id}
, я вижу только первый option_id и option_text каждого poll_id.
обратите внимание, что возможно до 20 вариантов.
как я могу получить все опции для конкретного poll_id, а не только один?