У меня есть служба с полезной нагрузкой 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));
}
@CristianColorado готово
Если вы хотите задокументировать тело запроса, используйте PayloadDocumentation.requestFields.




Я только что создал для вас небольшой тест, чтобы показать документацию по массиву с помощью 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;
}
Можете ли вы поделиться своей реализацией конечной точки и кодом создания списка?