javax验证不验证notNull

时间:2019-10-07 07:54:38

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

我有一个springBoot 2.1.9.RELEASE应用程序,该应用程序将Spring Data用于Couchbase

我有这个对象

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Hostel<T> {

    @NotNull
    @JsonProperty("_location")
    private T location;

}

和另外一个

@Document
@Data
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(of = { "id" })
@Builder
public class HTMDoc {

    @Id
    private String id;
    @NotNull
    @Field
    private Hostel hostel;

}

在服务上

public HTMDoc create(@Valid HTMDoc doc) {
    return repository.save(doc);
}

在测试中

service.create(new HTMDoc());

但是当我保存时,我得到了这个错误,而不是旅馆字段中的验证NotNull

 org.springframework.data.mapping.MappingException: An ID property is needed, but not found/could not be generated on this entity.

6 个答案:

答案 0 :(得分:7)

您需要在服务类上使用@org.springframework.validation.annotation.Validated批注以启用验证。

@Validated
@Service
public class DocService {
  public HTMDoc create(@Valid HTMDoc doc) {
    return repository.save(doc);
  }
}

答案 1 :(得分:2)

在ID上添加以下注释,然后尝试一下:

@Id
@GeneratedValue(strategy = GenerationStrategy.UNIQUE)
private String id;

有关@GeneratedValue批注的更多信息,可以在以下很好的答案中找到:Spring GeneratedValue annotation usage

答案 2 :(得分:0)

将注释放在吸气剂上。

私有字段中可能不支持该验证。

答案 3 :(得分:0)

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Hostel<T> {
    @Id
    private Long id;
    @NotNull
    @JsonProperty("_location")
    private T location;

}

在模型类中,在任何属性上都必须使用@Id。

答案 4 :(得分:0)

请在您的id字段中添加以下语法

// UserListItem.vue
<template>
  <span class="userListContent">
    <a :href="'/profile/'+user.id" target="blank">{{user.name}}</a>
    <i @click="showPlusIcon = !showPlusIcon" class="far" :class="iconId"></i>
    <input type="checkbox" />
  </span>
</template>
<script>
  export default {
    props: {
      user: {
        type: Object,
        required: true
      }
    },
    data () {
      return {
        showPlusIcon: true
      }
    },
    computed: {
      iconId () {
        return this.showPlusIcon ? 'fa-plus' : 'fa-check-circle'
      }
    }
  }
</script>

答案 5 :(得分:0)

您需要在类中使用@Validated批注,以通知Spring Boot这些类应通过javax验证进行验证。

@Validated
@Component
public class Phone {
 //Your logic
}