我目前在一个Sprig Boot (2)React式项目中工作。所有的CRUD端点和测试都工作得很好。然后我决定在创建todo时添加验证,为此我在我的仓库类中添加了注解:
@Data
@Container(containerName = "myContainer")
public class ToDo {
@Id
@PartitionKey
@GeneratedValue
private String id;
@NotBlank(message = "Category must not be blank")
private String category;
@NotNull(message = "Complete must not be null")
@AssertTrue(message = "Complete must be either true or false")
private boolean complete;
@NotBlank(message = "Name must not be blank")
private String name;
}
字符串
我在控制器方法中添加了一个@Valid注解,用于创建todo
@PostMapping
public Mono<ResponseEntity<ToDo>> createTodo(@Valid @RequestBody ToDo toDoItem) {
return toDoService.saveItem(toDoItem)
.flatMap(savedItem -> Mono.just(ResponseEntity.status(HttpStatus.CREATED).body(savedItem)))
.onErrorResume(DuplicateItemException.class, ex ->
Mono.just(ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ToDoDAO())));
}
型
这是相应的测试:
@Test
void createItem() {
ToDoDAO newItem = new ToDoDAO();
newItem.setName("New Item");
newItem.setCategory("Category");
newItem.setComplete(false);
createItem(newItem).expectStatus().isCreated();
}
型
问题是:通过添加@Valid注解,这个特定的测试无法通过,返回一个错误的请求响应。如果我删除@Valid注解,测试再次通过。任何建议都是非常感谢的。
我希望返回的状态码是201,已创建。
1条答案
按热度按时间4si2a6ki1#
这个问题与@Valid annotation有关。我解决这个问题的方法是删除annotation并创建一个helper类,并在service implementation类中使用它。这种方法对性能更好,因为在访问数据库之前会验证项目:
字符串