public Mono<ServerResponse> post(ServerRequest request) {
final Mono<Person> person = request.bodyToMono(Person.class);
final String id = ????; //replace this with newly inserted //objects id
return created(UriComponentsBuilder.fromPath("people/" +
id).build().toUri())
.contentType(APPLICATION_JSON)
.body(
fromPublisher(
person.map(p -> new Person(p,
id)).flatMap(personManager::save), Person.class));
}
在这里,我试图将实体发布到要创建的服务器上。我需要将新创建的对象的ID插入到响应的位置标头中。
答案 0 :(得分:0)
在kotlin中执行我的项目之后,您可以编写如下代码:
@Configuration
class ResumeRoute {
@Bean
fun resumeRoutes(@Value("\${baseServer:http://localhost:8080}") baseServer: String, resumeRepository: ResumeRepository) = router {
POST("/resume")
{
it.principal().flatMap {
resumeRepository.save(Resume.emptyResume(UUID.randomUUID().toString(), it.name, Language.EN)).toMono()
}.flatMap { created(URI("${baseServer}/resume/${it.id}")).build() }
}
}
}
即使这是kotlin而非Java版本,这里重要的是,您应该先拥有实体才能获取ID,然后使用它来创建服务器响应
因此,您的代码应如下所示:
public Mono<ServerResponse> post(ServerRequest request) {
return request.bodyToMono(Person.class)
.map(personManager::save)
.flatMap(savedPerson ->
created((UriComponentsBuilder.fromPath("people/" + savedPerson.getId()).build().toUri()))
.body(fromObject(savedPerson)));
}
我希望这可以为您提供帮助