我已将此方法设置为从spring boot rest控制器返回响应:
public ResponseEntity<Map<String, Object>> get(@PathVariable("id") long id) {
try {
return new ResponseEntity<>(this.ReportDAO.read("dbuser1"), HttpStatus.OK);
} catch (Exception e) {
return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
这就是道的方法:
@Autowired
private JdbcTemplate jdbcTemplate;
public Map<String, Object> read(String testParam) {
List<SqlParameter> parameters = Arrays.asList(new SqlParameter(Types.NVARCHAR));
CallableStatementCreator csc = new CallableStatementCreator() {
@Override
public CallableStatement createCallableStatement(Connection con) throws SQLException {
CallableStatement cs = con.prepareCall("{call test (?)}");
cs.setString(1, testParam);
return cs;
}
};
return jdbcTemplate.call(csc, parameters);
}
我成功地将一个json对象作为响应,但格式如下:
# result-set-1: [ {…}, {…} ]
当我期待有:
[ {…}, {…} ]
为什么要将结果集插入 #result-set-1
钥匙?我怎样才能改变这种行为?
2条答案
按热度按时间t8e9dugd1#
JdbcTemplate#call
返回map<string,object>您可以通过使用key从map中提取key来改变此行为#result-set-1
.我就是这样做的:
sql语句
插入语句:
存储过程:
控制器
p1tboqfb2#
我建议您提取所有结果集并将它们合并在一起。您可以按照另一个答案的建议去做,只需从Map中获取“#result-set-1”,但我建议在从dao方法返回之前,至少将resultset转换为应用程序表示的对象(“thing”pojo)。我认为将结果集结合在一起可能是一个更持久的解决方案,除非有人能想出一个为什么不这样做的理由。
我将resultset中的一些代码修改为list,以实际解析结果集。