我有一个servlet
正在运行,从doGet上的DB
提取数据并使用JSON
格式化的字符串进行回复以填充Highchart.js
时间 - 系列图表:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String json = "";
String sDate = request.getParameter("start");
String eDate = request.getParameter("end");
String app = request.getParameter("app");
String env = request.getParameter("env");
if (sDate != null && eDate != null) {
Timestamp from = TimestampUtils.parseTimestamp(sDate, null);
Timestamp to = TimestampUtils.parseTimestamp(eDate, null);
try {
throughPutList = interop.getThroughputEntriesInTimespan(env, app, from, to);
} catch (Exception e) {
e.printStackTrace();
}
int counter = 1;
if (throughPutList != null) {
json += "[";
}
assert throughPutList != null;
for (ThroughputEntry chartModel : throughPutList) {
json += "[" + (chartModel.getRetrieved().getEpochSecond()* TimestampUtils.MILLIS_PER_SECOND + "," + chartModel.getThroughput() + "]");
if (counter < throughPutList.size()) {
json += ",";
}
counter++;
}
if (throughPutList != null) {
json += "]";
}
if (throughPutList == null) {
json = "No record found";
}
} else {
json = "Date must be selected." + "App : " + app + " " + eDate;
}
response.getWriter().write(json);
}
}
我是javascript
,highchart
和JSON
的新手,是否可以将其细化为使用实际的JSON
对象/数组而不是字符串,或者是我有合理的方法来解决这个问题的方法。
答案 0 :(得分:0)
您手动构造一个JSON字符串,冒着在结果字符串中出现语法错误的风险。由于您只是生成数字数组的数组,因此这种风险似乎是可控的。否则,您可能希望使用所有常见JSON库提供的JSONWriter
之类的内容。
对性能StringBuilder
使用String
代替json
,性能稍有改善。
我会改进错误处理。如果没有找到数据或缺少参数,您将返回错误消息。
在第一种情况下,我只返回空数组,让客户端弄清楚数据是空的。
如果缺少必需参数,我会回答HTTP错误400(错误请求):
response.sendError(400);
如果在检索数据时发生运行时错误,我不会吞下异常但会发送内部服务器错误(500)并记录异常。