Search in sources :

Example 6 with Flux

use of reactor.core.publisher.Flux in project spring-framework by spring-projects.

the class ServerSentEventHttpMessageReaderTests method readServerSentEvents.

@Test
public void readServerSentEvents() {
    MockServerHttpRequest request = MockServerHttpRequest.post("/").body("id:c42\nevent:foo\nretry:123\n:bla\n:bla bla\n:bla bla bla\ndata:bar\n\n" + "id:c43\nevent:bar\nretry:456\ndata:baz\n\n");
    Flux<ServerSentEvent> events = this.messageReader.read(ResolvableType.forClassWithGenerics(ServerSentEvent.class, String.class), request, Collections.emptyMap()).cast(ServerSentEvent.class);
    StepVerifier.create(events).consumeNextWith(event -> {
        assertEquals("c42", event.id().get());
        assertEquals("foo", event.event().get());
        assertEquals(Duration.ofMillis(123), event.retry().get());
        assertEquals("bla\nbla bla\nbla bla bla", event.comment().get());
        assertEquals("bar", event.data().get());
    }).consumeNextWith(event -> {
        assertEquals("c43", event.id().get());
        assertEquals("bar", event.event().get());
        assertEquals(Duration.ofMillis(456), event.retry().get());
        assertFalse(event.comment().isPresent());
        assertEquals("baz", event.data().get());
    }).expectComplete().verify();
}
Also used : Jackson2JsonDecoder(org.springframework.http.codec.json.Jackson2JsonDecoder) StepVerifier(reactor.test.StepVerifier) AbstractDataBufferAllocatingTestCase(org.springframework.core.io.buffer.AbstractDataBufferAllocatingTestCase) MediaType(org.springframework.http.MediaType) Assert.assertTrue(org.junit.Assert.assertTrue) Test(org.junit.Test) Mono(reactor.core.publisher.Mono) Flux(reactor.core.publisher.Flux) MockServerHttpRequest(org.springframework.mock.http.server.reactive.test.MockServerHttpRequest) Assert.assertFalse(org.junit.Assert.assertFalse) Duration(java.time.Duration) ResolvableType(org.springframework.core.ResolvableType) Collections(java.util.Collections) Assert.assertEquals(org.junit.Assert.assertEquals) MockServerHttpRequest(org.springframework.mock.http.server.reactive.test.MockServerHttpRequest) Test(org.junit.Test)

Example 7 with Flux

use of reactor.core.publisher.Flux in project spring-framework by spring-projects.

the class ViewResolutionResultHandler method resolveAsyncAttributes.

private Mono<Void> resolveAsyncAttributes(Map<String, Object> model) {
    List<String> names = new ArrayList<>();
    List<Mono<?>> valueMonos = new ArrayList<>();
    for (Map.Entry<String, ?> entry : model.entrySet()) {
        ReactiveAdapter adapter = getAdapterRegistry().getAdapter(null, entry.getValue());
        if (adapter != null) {
            names.add(entry.getKey());
            if (adapter.isMultiValue()) {
                Flux<Object> value = Flux.from(adapter.toPublisher(entry.getValue()));
                valueMonos.add(value.collectList().defaultIfEmpty(Collections.emptyList()));
            } else {
                Mono<Object> value = Mono.from(adapter.toPublisher(entry.getValue()));
                valueMonos.add(value.defaultIfEmpty(NO_VALUE));
            }
        }
    }
    if (names.isEmpty()) {
        return Mono.empty();
    }
    return Mono.when(valueMonos, values -> {
        for (int i = 0; i < values.length; i++) {
            if (values[i] != NO_VALUE) {
                model.put(names.get(i), values[i]);
            } else {
                model.remove(names.get(i));
            }
        }
        return NO_VALUE;
    }).then();
}
Also used : HttpRequestPathHelper(org.springframework.web.server.support.HttpRequestPathHelper) Ordered(org.springframework.core.Ordered) RequestedContentTypeResolver(org.springframework.web.reactive.accept.RequestedContentTypeResolver) WebExchangeDataBinder(org.springframework.web.bind.support.WebExchangeDataBinder) BindingResult(org.springframework.validation.BindingResult) BindingContext(org.springframework.web.reactive.BindingContext) HandlerResultHandlerSupport(org.springframework.web.reactive.result.HandlerResultHandlerSupport) ArrayList(java.util.ArrayList) ServerWebExchange(org.springframework.web.server.ServerWebExchange) Model(org.springframework.ui.Model) ModelAttribute(org.springframework.web.bind.annotation.ModelAttribute) Locale(java.util.Locale) Map(java.util.Map) MethodParameter(org.springframework.core.MethodParameter) HandlerResultHandler(org.springframework.web.reactive.HandlerResultHandler) ResolvableType(org.springframework.core.ResolvableType) ReactiveAdapterRegistry(org.springframework.core.ReactiveAdapterRegistry) ReactiveAdapter(org.springframework.core.ReactiveAdapter) ClassUtils(org.springframework.util.ClassUtils) Collection(java.util.Collection) MediaType(org.springframework.http.MediaType) Mono(reactor.core.publisher.Mono) NotAcceptableStatusException(org.springframework.web.server.NotAcceptableStatusException) Collectors(java.util.stream.Collectors) HandlerResult(org.springframework.web.reactive.HandlerResult) Flux(reactor.core.publisher.Flux) List(java.util.List) Collections(java.util.Collections) AnnotationAwareOrderComparator(org.springframework.core.annotation.AnnotationAwareOrderComparator) BeanUtils(org.springframework.beans.BeanUtils) Assert(org.springframework.util.Assert) StringUtils(org.springframework.util.StringUtils) Mono(reactor.core.publisher.Mono) ArrayList(java.util.ArrayList) Map(java.util.Map) ReactiveAdapter(org.springframework.core.ReactiveAdapter)

Example 8 with Flux

use of reactor.core.publisher.Flux in project spring-framework by spring-projects.

the class BodyExtractorsTests method toDataBuffers.

@Test
public void toDataBuffers() throws Exception {
    BodyExtractor<Flux<DataBuffer>, ReactiveHttpInputMessage> extractor = BodyExtractors.toDataBuffers();
    DefaultDataBufferFactory factory = new DefaultDataBufferFactory();
    DefaultDataBuffer dataBuffer = factory.wrap(ByteBuffer.wrap("foo".getBytes(StandardCharsets.UTF_8)));
    Flux<DataBuffer> body = Flux.just(dataBuffer);
    MockServerHttpRequest request = MockServerHttpRequest.post("/").body(body);
    Flux<DataBuffer> result = extractor.extract(request, this.context);
    StepVerifier.create(result).expectNext(dataBuffer).expectComplete().verify();
}
Also used : DefaultDataBuffer(org.springframework.core.io.buffer.DefaultDataBuffer) MockServerHttpRequest(org.springframework.mock.http.server.reactive.test.MockServerHttpRequest) DefaultDataBufferFactory(org.springframework.core.io.buffer.DefaultDataBufferFactory) Flux(reactor.core.publisher.Flux) ReactiveHttpInputMessage(org.springframework.http.ReactiveHttpInputMessage) DefaultDataBuffer(org.springframework.core.io.buffer.DefaultDataBuffer) DataBuffer(org.springframework.core.io.buffer.DataBuffer) Test(org.junit.Test)

Example 9 with Flux

use of reactor.core.publisher.Flux in project spring-framework by spring-projects.

the class BodyInsertersTests method ofPublisher.

@Test
public void ofPublisher() throws Exception {
    Flux<String> body = Flux.just("foo");
    BodyInserter<Flux<String>, ReactiveHttpOutputMessage> inserter = BodyInserters.fromPublisher(body, String.class);
    MockServerHttpResponse response = new MockServerHttpResponse();
    Mono<Void> result = inserter.insert(response, this.context);
    StepVerifier.create(result).expectComplete().verify();
    ByteBuffer byteBuffer = ByteBuffer.wrap("foo".getBytes(UTF_8));
    DataBuffer buffer = new DefaultDataBufferFactory().wrap(byteBuffer);
    StepVerifier.create(response.getBody()).expectNext(buffer).expectComplete().verify();
}
Also used : ReactiveHttpOutputMessage(org.springframework.http.ReactiveHttpOutputMessage) DefaultDataBufferFactory(org.springframework.core.io.buffer.DefaultDataBufferFactory) Flux(reactor.core.publisher.Flux) MockServerHttpResponse(org.springframework.mock.http.server.reactive.test.MockServerHttpResponse) ByteBuffer(java.nio.ByteBuffer) DefaultDataBuffer(org.springframework.core.io.buffer.DefaultDataBuffer) DataBuffer(org.springframework.core.io.buffer.DataBuffer) Test(org.junit.Test)

Example 10 with Flux

use of reactor.core.publisher.Flux in project spring-framework by spring-projects.

the class DefaultEntityResponseBuilderTests method fromPublisherResolvableType.

@Test
public void fromPublisherResolvableType() throws Exception {
    Flux<String> body = Flux.just("foo", "bar");
    ResolvableType type = ResolvableType.forClass(String.class);
    EntityResponse<Flux<String>> response = EntityResponse.fromPublisher(body, type).build().block();
    assertSame(body, response.entity());
}
Also used : Flux(reactor.core.publisher.Flux) ResolvableType(org.springframework.core.ResolvableType) Test(org.junit.Test)

Aggregations

Flux (reactor.core.publisher.Flux)28 Test (org.junit.Test)21 ResolvableType (org.springframework.core.ResolvableType)15 Collections (java.util.Collections)11 DataBuffer (org.springframework.core.io.buffer.DataBuffer)11 MediaType (org.springframework.http.MediaType)11 Mono (reactor.core.publisher.Mono)11 StepVerifier (reactor.test.StepVerifier)9 MockServerHttpRequest (org.springframework.mock.http.server.reactive.test.MockServerHttpRequest)8 Duration (java.time.Duration)7 List (java.util.List)7 Assert.assertFalse (org.junit.Assert.assertFalse)7 DefaultDataBufferFactory (org.springframework.core.io.buffer.DefaultDataBufferFactory)7 Assert (org.springframework.util.Assert)7 Map (java.util.Map)6 Assert.assertTrue (org.junit.Assert.assertTrue)6 AbstractDataBufferAllocatingTestCase (org.springframework.core.io.buffer.AbstractDataBufferAllocatingTestCase)6 DefaultDataBuffer (org.springframework.core.io.buffer.DefaultDataBuffer)6 Assert.assertEquals (org.junit.Assert.assertEquals)5 ReactiveHttpInputMessage (org.springframework.http.ReactiveHttpInputMessage)5