gpt4 book ai didi

java - SonarLint:返回空集合而不是 null

转载 作者:行者123 更新时间:2023-12-02 09:03:53 28 4
gpt4 key购买 nike

我正在对返回对象列表的方法进行 ajax 调用,如果在 try-catch block 中获取数据时发生某些情况,我有一个 response.setStatus(400) 来然后在前端显示错误,在那里我返回 null,在那里我收到 SonarLint 通知。现在,如果我将其更改为空集合,则会出现以下错误:

已为此响应调用 getWriter()

我认为上面的情况是因为我返回了空集合和 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;
}

知道如何修复此通知吗?

最佳答案

我建议不要捕获此方法中的异常,而是抛出它,并使用 exception handler method在你的 Controller 中来处理它。在这种情况下,您永远不会从该方法返回 null,Sonar 也没有什么可提示的。这也意味着您正在按照 Spring 设计的方式使用 Spring。

例如,如下所示:

@ExceptionHandler
@ResponseStatus(HttpStatus.BAD_REQUEST)
public void handleException(Exception e) {
log.error("Exception during request", e);
}

或当前处理的直接等效项:

@ExceptionHandler
public ResponseEntity<?> handleException(Exception e) {
return ResponseEntity.badRequest().body(e.getMessage()).build();
}

切换到异常处理程序后,您可以从常规方法中删除 HttpServletResponse 响应 参数。

关于java - SonarLint:返回空集合而不是 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59970441/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com