gpt4 book ai didi

spring - 如何避免在 requestMapping 方法中使用实体造成的漏洞?

转载 作者:行者123 更新时间:2023-12-01 14:41:14 26 4
gpt4 key购买 nike

我有一个 Controller ,其方法类似于

@PostMapping(value="/{reader}")
public String addToReadingList(@PathVariable("reader") String reader, Book book) {
book.setReader(reader);
readingListRepository.save(book);
return "redirect:/readingList/{reader}";
}

当我使用 Sonarqube 运行静态代码分析时,我收到一个漏洞报告,指出

Replace this persistent entity with a simple POJO or DTO object



但是如果我使用 DTO(它与实体类具有完全相同的字段,那么我会收到另一个错误:

1 duplicated blocks of code must be removed



正确的解决方案应该是什么?

提前致谢。
恩瑞克

最佳答案

您应该构建一个新的单独类,将您的实体(“Book”)表示为普通旧 Java 对象 (POJO) 或数据传输对象 (DTO)。如果您使用 JSF 或其他有状态技术,这条规则很重要。如果您的实体是有状态的,则可能会打开 JPA session 等,这些 session 可能会修改您的数据库(例如,如果您在有状态 bean 的 JSF 中调用 setter)。

对于我的项目,我忽略了这个 Sonar 规则,原因有两个:

  • 我总是 REST 和 REST 会将我的 Java 类映射到 JSON 中,可以将其视为 DTO。
  • REST 是无状态的(无服务器 session ),因此在转换为 JSON 后不会打开任何数据库事务
  • 关于spring - 如何避免在 requestMapping 方法中使用实体造成的漏洞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54233672/

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