我有一个带有JSON 数组有效负载的服务,如下所示:
[{ message: "one"}, {message: "two"}]如何使用spring-restdocs记录这个文档?
MessageContract contractOne = new MessageContract();
contractOne.setMessage("one");
List list = new ArrayList<>();
list.add(contractOne);
this.webTestClient
.post().uri("/messages")
.body(BodyInserters.fromObject(list))
.exchange().expectStatus().isCreated().expectBody()
.consumeWith(document("POST messages",
requestParameters(
parameterWithName("message").description("Massage we should save"),
))
);我有个错误:
org.springframework.restdocs.snippet.SnippetException:
Request parameters with the following names were not found in the request:
[message, ...]我认为restdocs没有看到字段,因为它包含一个数组。如何正确处理?
添加:
资源:
@PostMapping
private Mono<ResponseEntity> postMessage(@RequestBody List<MessageContract> contract) {
return service
.save(contract)
.collectList()
.thenReturn(new ResponseEntity(HttpStatus.CREATED));
}发布于 2019-03-22 10:54:11
我刚刚为您创建了一个小测试,以便用requestFields.fieldWithPath显示数组文档。
请确认,这种方法对您有效。
@Test
public void documentRequestBodyArray() {
webTestClient
.post()
.uri("/contract")
.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
.syncBody(List.of(new MessageContract("one"), new MessageContract("two")))
.exchange()
.expectStatus().isOk()
.expectBody()
.consumeWith(document("documentArray",
requestFields(
fieldWithPath("[]").description("a message array"),
fieldWithPath("[].message").description("a message"))));
}这里的MessageContract看起来像:
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class MessageContract {
private String message;
}https://stackoverflow.com/questions/55078737
复制相似问题