【发布时间】:2018-02-01 00:33:51
【问题描述】:
我有一个 Spring Boot 项目,它有一个类似这样的实体的 post 端点:
class Task{
@JoinTable(name = "task_user",
joinColumns = arrayOf(JoinColumn(name = "task_id")),
inverseJoinColumns = arrayOf(JoinColumn(name = "user_id")))
@ManyToMany
var users: MutableSet<User> = HashSet()
}
我不希望人们能够向用户发布任务,但 @JsonProperty(access = READ_ONLY) 似乎不适用于集合,所以如果我提供存在的 id,它们会附加到任务无论如何,有没有人知道这是否可以以类似的方式为集合完成(我知道可以使用自定义反序列化器来完成)?
【问题讨论】:
-
您应该避免对 API 和持久层使用相同的对象。尝试仅使用必填字段创建一个像
TaskRequest这样的新对象,然后将其映射到Task对象以保持实体。 -
是的,这更有意义,我不知道为什么我没有考虑这一点,在以前的非 Kotlin 项目中已经这样做了。我仍然想知道如何不序列化集合,似乎应该有一种简单的方法来做到这一点。
-
企业应用程序由不同的层组成是有原因的,这就是所谓的“责任分离”。如果您在控制器中使用
Entity,您也可以将HttpServletRequest发送到DAO。你可以花很多时间来解决这个问题,如果你是一个小时工,这可能会带来好处,或者你可以从更简洁的设计开始。您的选择。 -
我同意,我完成了一个重大的重构,完全做到了,但是正如我所说,我仍然想知道如何使一个集合只能用 Jackson 序列化,如果我下次需要它,因为它不适用于集合并不明显(除非我做错了什么并且它确实如此,或者是因为 Kotlin 不兼容)
-
嘿,stackoverflow.com/a/45861877/1942642 回答了你的问题吗?
标签: spring-boot jackson kotlin