是否应该使用实体类作为请求主体[关闭]

2023-12-29

假设我必须保存一个实体,在本例中为 Book。我有下一个代码:

@RestController
@RequestMapping("books")
public class BookController {
    
    @Inject
    BookRepository bookRepository;
    
    @PostMapping
    public Book saveBook(@RequestBody Book book) {
        return bookRepository.save(book);
    }
}

我的实体 Book 是一个持久性实体:

@Entity(name = "BOOK")
public class Book{

    @Id
    @Column(name = "book_id")
    private Integer id;

    @Column(name = "title")
    private String title;

    (get/sets...)
}

问题是:使用我的持久性实体是一种不好的做法@RequestBody控制器层?或者我应该创建一本书 DTO 并将其映射到服务层中的持久性类?什么更好,为什么?


您应该创建一个 DTO 类并将其映射到持久性类。参考本规则说明 https://rules.sonarsource.com/java/tag/spring/RSPEC-4684对于相同的。指定的原因是

如果将持久对象用作用 @RequestMapping 注释的方法的参数,则可以通过特制的用户输入将意外字段的内容更改到数据库中

除此之外,使用 DTO,我们可以省略一些我们不希望在表示层中出现/可见的持久对象属性。

您可以将 DTO 类映射到控制器本身的持久性实体,如下所示。

@RestController
@RequestMapping("books")
public class BookController {
    
    @Autowired
    BookRepository bookRepository;

    @Autowired
    ModelMapper modelMapper
    
    @PostMapping
    public Book saveBook(@RequestBody BookDTO modelBook) {
        Book book = this.modelMapper.map(modelBook, Book.class);
        return bookRepository.save(book);
    }
}

ModelMapper 是一个框架,用于执行 DTO 到实体的映射,反之亦然。查看模型映射器网站 http://modelmapper.org/.

您可以参考回答和评论 https://stackoverflow.com/questions/54233672/how-to-avoid-the-vulnerability-created-by-using-entities-at-a-requestmapping-met有关相同内容的更多信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否应该使用实体类作为请求主体[关闭] 的相关文章

  • Grails 2.3.0 自动重新加载不起作用

    我最近将我们的项目升级到 grails 2 3 0 一切工作正常 除了每当我更改代码时自动重新加载都无法工作的问题 这包括所有项目工件 控制器 域 服务 gsps css 和 javascript 文件 我的旧版本 grails 可以正常工
  • Firestore - RecycleView - 图像持有者

    我不知道如何编写图像的支架 我已经设置了 2 个文本 但我不知道图像的支架应该是什么样子 你能帮我告诉我图像的文字应该是什么样子才能正确显示吗 holder artistImage setImageResource model getArt
  • 内存一致性 - Java 中的happens-before关系[重复]

    这个问题在这里已经有答案了 在阅读有关内存一致性错误的 Java 文档时 我发现与创建 发生 之前 关系的两个操作相关的点 当语句调用时Thread start 每个具有 与该语句发生之前的关系也有一个 与 new 执行的每个语句之间发生的
  • 如何让spring为JdbcMetadataStore创建相应的schema?

    我想使用此处描述的 jdbc 元数据存储 https docs spring io spring integration docs 5 2 0 BUILD SNAPSHOT reference html jdbc html jdbc met
  • 如何将 android.net.Uri 转换为 java.net.URL? [复制]

    这个问题在这里已经有答案了 有没有办法从Uri to URL 我正在使用的库需要这个 它only接受一个URL但我需要在我的设备上使用图像 如果该方案的Uri is http or https new URL uri toString 应该
  • 在java中实现你自己的阻塞队列

    我知道这个问题之前已经被问过并回答过很多次了 但我只是无法根据互联网上找到的示例找出窍门 例如this http tutorials jenkov com java concurrency blocking queues html or t
  • Java 8 中函数式接口的使用

    这是来自的后续问题Java 8 中的 双冒号 运算符 https stackoverflow com questions 20001427 double colon operator in java 8其中 Java 允许您使用以下方式引用
  • 列表应该如何转换为具体的实现?

    假设我正在使用一个我不知道源代码的库 它有一个返回列表的方法 如下所示 public List
  • Git 无法识别重命名和修改的包文件

    我有一个名为的java文件package old myfile java 我已经通过 git 提交了这个文件 然后我将我的包重命名为new所以我的文件在package new myfile java 我现在想将此文件重命名 和内容更改 提交
  • 如何记录来自 Akka (Java) 的所有传入消息

    在 Scala 中 您可以使用 LoggingReceive 包装接收函数 如何通过 Java API 实现相同的目标 def receive LoggingReceive case x do something Scala API 有Lo
  • Spring Security OAuth2简单配置

    我有一个简单的项目 需要以下简单的配置 我有一个 密码 grant type 这意味着我可以提交用户名 密码 用户在登录表单中输入 并在成功时获得 access token 有了该 access token 我就可以请求 API 并获取用户
  • 在 Spring Boot Actuator 健康检查 API 中启用日志记录

    我正在使用 Spring boot Actuator APIproject https imobilenumbertracker com 拥有一个健康检查端点 并通过以下方式启用它 management endpoints web base
  • 将图像添加到自定义 AlertDialog

    我制作了一个 AlertDialog 让用户可以从我显示的 4 个选项中选择一个 前 3 个让他们在单击号码时直接拨打号码 第 4 个显示不同的视图 现在看起来是这样的 由于第四个选项的目的是不同的任务 我想让它看起来不同 因为用户可能会感
  • 如何在Java中正确删除数组[重复]

    这个问题在这里已经有答案了 我刚接触 Java 4 天 从我搜索过的教程来看 讲师们花费了大量精力来解释如何分配二维数组 例如 如下所示 Foo fooArray new Foo 2 3 但我还没有找到任何解释如何删除它们的信息 从内存的情
  • Android - 9 补丁

    我正在尝试使用 9 块图片创建一个新的微调器背景 我尝试了很多方法来获得完美的图像 但都失败了 s Here is my 9 patch 当我用Draw 9 patch模拟时 内容看起来不错 但是带有箭头的部分没有显示 或者当它显示时 这部
  • Android AutoCompleteTextView 带芯片

    我不确定我是否使用了正确的词语来描述此 UI 功能 但我已附上我希望在我的应用程序中实现的目标的快照 它由 Go SMS 使用 用户在编辑文本中键入联系人 在用户从完成下拉列表中选择联系人后 该联系人将被插入到编辑文本中 如附图所示 编辑文
  • spring boot @Autowired 来自另一个模块的 bean

    我的问题是如何将包添加到组件列表中以扫描 ComponentScan basePackages io swagger com company project like add it here 但该包位于另一个模块中在我的项目中 这是我的项目
  • EnableFeignClients 使 Spring 无法加载上下文

    我只有一个 Feign 客户端 注释如下 FeignClient name billetClient fallback BilletClientFallback class url services billeterie url 这是我的配
  • 没有 OAuth 的 Spring Security JWT

    最近我开始学习如何使用oauth 2 0 jwt配置spring boot 我有一个问题 是否可以使用spring boot security jwt避免oauth 2 0 是的 可以使用JWT无需使用标准化的功能OAuth 2 0 flo
  • Android 和 Java 中绘制椭圆的区别

    在Java中由于某种原因Ellipse2D Double使用参数 height width x y 当我创建一个RectF在Android中参数是 left top right bottom 所以我对适应差异有点困惑 如果在 Java 中创

随机推荐

  • GooglePlus 与 CocoaPods 链接错误

    我添加到我的 pod 文件中 pod google plus ios sdk 1 4 1 I did a pod update 我导入了 import
  • 代理无法通过 SSL 连接工作

    我正在尝试使用 tor socksipy 和 ssl 来代理 ssl 连接 我的客户看起来像这样 import socks ssl s socks socksocket s setproxy socks PROXY TYPE SOCKS5
  • 如果 内部有多个

    我有一个表列 其中包含多个 div 以适应图标 标题和描述文本 另外 当鼠标悬停时 我需要提供突出显示 覆盖效果 突出显示所有列 包括 div 图像 标题和描述文本 这是 HTML td div style display inline b
  • Python 相当于 Matlab textscan

    我正在将一些 Matlab 代码转移到 Python 我对 Python 比较陌生 不确定是否有与 Matlab 相当的 Pythontextscan http www mathworks com help matlab ref texts
  • Facebook 图形 API 错误

    我正在实现 facebook graph api 来获取用户详细信息 例如名字 电子邮件等 下面是我的代码 nvpreq access token 160370244010460 b8eba6c19f01b271ef0c682e 10000
  • 网格中的复选框控件未触发 fieldupdated 事件

    我在自定义网格上选择的复选框不会触发 Fieldupdated 事件 protected void MyTable Selected FieldUpdated PXCache cache PXFieldUpdatedEventArgs e
  • 使用strtok读取csv文件

    我正在尝试使用 C 中的 strtok 来读取 csv 文件 并将内容存储到 struct Game 的数组中 我的代码如下所示 FILE fp int i 0 if fp fopen Games csv r NULL printf Can
  • 网络状态改变时广播Intent

    当网络状态发生变化 即从 GSM 到 Wifi 时 Android 是否会广播意图 如果是这样 我需要什么许可以及意图操作是什么 Update 请改用这个 https stackoverflow com a 2677519 241869 h
  • 如何通过浏览器javascript访问Docusign API?

    我正在用 Javascript 构建一个基于浏览器的应用程序 我尝试通过 jQuery 访问 docusign api support cors true ajax crossDomain true url https demo docus
  • 找出多态对象的大小

    我有一个指针Base base ptr到多态对象 是否可以找出所述对象的动态类型的大小 AFAIK sizeof base ptr 产生静态类型的大小base ptr 我开始怀疑这是不可能的 但也许我忽略了一些事情 注意 我知道我可以向类型
  • Heroku - 未找到视图 - FileFinderView InvalidArgumentException

    这消耗了我生命的最后两天 本地一切工作正常 但是当我的代码部署到 Heroku 时 Laravel 找不到index看法 据我了解 这是一些缓存问题 因此我尝试了 Artisan 的大部分命令来清理缓存 php artisan config
  • 基于单选的AngularJS Filter

    我正在实现一个搜索输入框 该输入框应该基于正在迭代的对象的特定属性进行搜索 并且我希望使用单选按钮来选择它们 例如 这是我的代码 span style margin bottom 10px display inline block Sear
  • 从 4 个整数的列表生成最大 HH:MM [重复]

    这个问题在这里已经有答案了 注意 另一个问题是这个问题的重复 如果我这个问题比那个问题早 6 个月发布 那么我的问题怎么会是重复的呢 我有 4 个非负整数 a b c d 它们都小于或等于 9 我必须以 24 小时格式返回时钟上可以显示的最
  • 如何构建访问控制列表 (ACL) 的数据模型

    当您只处理对离散资源具有一定访问级别的离散用户时 如何对充当访问控制列表 ACL 的数据库表进行建模是相当明显的 像这样的事情 TABLE acl user id INT resource id INT access type INT 其中
  • jenkins python 模块导入错误

    我已经在虚拟机中安装了 jenkins 模块 但仍然无法导入该模块并使用 Python 2 7 5 默认 2014 年 6 月 17 日 18 11 42 GCC 4 8 2 20140120 红帽 4 8 2 16 在 linux2 上
  • 如何避免 R 中的双重“for”循环

    我必须对数据框 ddf 的所有列组合执行函数 我通常这样做 myfunction lt function col1 col2 print aov col1 col2 ddf data frame first 1 3 second lette
  • 将 Django TimeField 中的时间乘以 float

    我正在尝试将当前表示为字符串的时间读取到 Python 2 7 中的 Django TimeField 模型中 并同时通过浮点数对其进行缩放 例如 00 31 14 1 0617 00 29 20 我已成功读取时间并将其存储到模型中 但无法
  • 类循环引用的原因?

    我知道循环引用 A 类持有 B 类 B 类持有 A 类 但由于我的编程还不够 我很难找到使用它们的理由 我想知道人们是否可以给我一些例子并解释使用它们的充分理由 就我而言 现在我正在查看 2D 源代码教程 用户创建了一个相互引用的 Crea
  • ggplot 相当于 matplot

    ggplot2 中是否有等效的函数来绘制该数据集 我使用 matplot 并读到可以使用 qplot 但它确实不起作用 ggplot matplot https stackoverflow com questions 12047787 gg
  • 是否应该使用实体类作为请求主体[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 假设我必须保存一个实体 在本例中为 Book 我有下一个代码 RestController RequestMapping books publi