в Spring Framework 5.0: функциональная веб-платформа, как поместить идентификатор созданной сущности newley в заголовок ответа сервера webflux - PullRequest
0 голосов
/ 07 октября 2018
 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));
 }

Здесь я пытаюсь отправить объект на сервер, который будет создан.Мне нужно вставить идентификатор вновь созданного объекта в заголовок местоположения ответа.

1 Ответ

0 голосов
/ 07 октября 2018

следуя моему проекту в 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, важно то, что вы должныпрежде чем получить свою сущность для получения идентификатора, а затем использовать ее для создания ответа сервера

, поэтому ваш код должен выглядеть примерно так:

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)));
}

Я надеюсь, что это может помочь вам

...