【问题标题】:Spring Boot - Validation on related entity one to many relationshipSpring Boot - 验证相关实体的一对多关系
【发布时间】:2020-04-03 04:19:07
【问题描述】:

假设我有一个 User 实体并且它与 Post 有一对多的关系

@OneToMany(
        cascade = CascadeType.ALL,
        orphanRemoval = true,
        fetch = FetchType.LAZY
)
@JoinColumn(
        name = "user_id",
        foreignKey = @ForeignKey(name = "fk"),
        referencedColumnName = "userId")
private List<Post> post = new ArrayList<>();

这是我的Post 实体

@NotBlank(message = "test")
@Column(length = 50)
private String title;

@Column
private String post;

插入新用户时如何验证帖子?例如这是我在请求中传递的内容

{
        "name": "Test name",
        "username": "Test username",
        "post": [
            {
                "title": "asdasd",
                "post": "asdasd"
            }
        ]
}

如果我在标题上传递一个空白字符串

"title": "",

我遇到了错误

Validation failed for classes .... during persist time for groups

【问题讨论】:

  • 您能否为错误提供更多上下文,也许是堆栈跟踪?
  • 组 [javax.validation.groups.Default, ]\n 约束违规列表:[\n\ tConstraintViolationImpl{interpolatedMessage='test', propertyPath=title, rootBeanClass=class com.test.app.api.models.Post, messageTemplate='test'}\n]

标签: java spring-boot spring-data-jpa


【解决方案1】:

你是否为 post 方法添加了 @Valid 注解? 示例:

 @PostMapping("/user")
 User insertNewUser(@Valid @RequestBody User user) {
    // Do something
  }

【讨论】:

    【解决方案2】:

    您需要将@Valid 注释添加到User 模型的post 成员。看到这个答案:https://stackoverflow.com/a/5142960/12431728

    【讨论】:

    • 我现在收到错误消息但是“post[0].title : test”应该是“post.title:test”
    猜你喜欢
    • 1970-01-01
    • 2018-07-04
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    • 2023-04-10
    相关资源
    最近更新 更多