【发布时间】:2020-05-15 03:34:17
【问题描述】:
我正在对返回对象列表的方法进行 ajax 调用,如果在 try-catch 块中获取数据时发生某些事情,我有一个 response.setStatus(400) 然后在前端显示错误,还有我返回 null,那里我收到 SonarLint 通知。现在,如果我将其更改为空集合,则会出现以下错误:
getWriter() has already been called for this response
我认为以上是因为我返回的是空集合和 http 响应状态 400。如果我将其保留为空,那么一切正常,只是 SonarLint 通知。
@GetMapping("/runquery")
@ResponseBody
public List<Map<String, Object>> runQuery(@RequestParam(name = "queryId") String queryId, @RequestParam(name = "formData") String formData, HttpServletResponse response) throws IOException {
(...)
try {
queryResult = namedParameterJdbcTemplateHive.queryForList(query, paramSource);
for (Map<String, Object> map : queryResult) {
Map<String, Object> newMap = new HashMap<>();
for (Map.Entry<String, Object> entry : map.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
if (key.contains(".")) {
key = key.replace(".", "_");
newMap.put(key, value);
} else {
newMap.put(key, value);
}
}
queryResultFinal.add(newMap);
}
} catch (Exception e) {
response.setStatus(400);
response.getWriter().write(e.getMessage());
return null; <-- SonarLint notification
}
return queryResultFinal;
}
知道如何解决这个通知吗?
【问题讨论】:
-
if something happens while getting the data in a try-catch block I have a response.setStatus(400)- 4xx 错误是与客户端相关的问题,您应该返回 5xx。让异常传播并通过@ControllerAdvice 连接异常映射器可能更好
标签: java spring-boot sonarlint