валидация javax не проверяет notNull - PullRequest
2 голосов
/ 07 октября 2019

У меня есть приложение 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 ]

7 голосов
/ 10 октября 2019

Вам необходимо использовать аннотацию @org.springframework.validation.annotation.Validated для вашего класса обслуживания, чтобы включить проверку.

@Validated
@Service
public class DocService {
  public HTMDoc create(@Valid HTMDoc doc) {
    return repository.save(doc);
  }
}
2 голосов
/ 07 октября 2019

Добавьте следующую аннотацию к идентификатору и попробуйте:

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

Подробнее об аннотации @GeneratedValue можно найти в этом замечательном ответе: Использование аннотации Spring GeneratedValue

0 голосов
/ 16 октября 2019

Вам необходимо использовать аннотацию @Validated в ваших классах, чтобы сообщить весенней загрузке, что эти классы должны быть проверены валидациями javax.

@Validated
@Component
public class Phone {
 //Your logic
}
0 голосов
/ 14 октября 2019

пожалуйста, добавьте следующий синтаксис в поле id

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Hostel<T> {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", nullable = false, updatable = false)
    private Long id;

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

}
0 голосов
/ 11 октября 2019
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Hostel<T> {
    @Id
    private Long id;
    @NotNull
    @JsonProperty("_location")
    private T location;

}

Использование @Id для любого свойства обязательно в классах модели.

0 голосов
/ 09 октября 2019

Поместите аннотацию на получатель.

Возможно, проверка не поддерживается в частных полях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...