@Bean public ResponseEntityResultHandler responseEntityResultHandler() { return new ResponseEntityResultHandler(serverCodecConfigurer().getWriters(), webFluxContentTypeResolver(), webFluxAdapterRegistry()); }
@Override public boolean supports(HandlerResult result) { Class<?> valueType = resolveReturnValueType(result); if (isSupportedType(valueType)) { return true; } ReactiveAdapter adapter = getAdapter(result); return adapter != null && !adapter.isNoValue() && isSupportedType(result.getReturnType().getGeneric().toClass()); }
/** * Constructor with an {@link ReactiveAdapterRegistry} instance. * @param writers writers for serializing to the response body * @param resolver to determine the requested content type * @param registry for adaptation to reactive types */ public ResponseEntityResultHandler(List<HttpMessageWriter<?>> writers, RequestedContentTypeResolver resolver, ReactiveAdapterRegistry registry) { super(writers, resolver, registry); setOrder(0); }
ReactiveAdapter adapter = getAdapter(result); MethodParameter actualParameter = result.getReturnTypeSource(); return writeBody(httpEntity.getBody(), bodyParameter, actualParameter, exchange); });
@Test public void responseEntityResultHandler() throws Exception { ApplicationContext context = loadConfig(WebFluxConfig.class); String name = "responseEntityResultHandler"; ResponseEntityResultHandler handler = context.getBean(name, ResponseEntityResultHandler.class); assertNotNull(handler); assertEquals(0, handler.getOrder()); List<HttpMessageWriter<?>> writers = handler.getMessageWriters(); assertEquals(11, writers.size()); assertHasMessageWriter(writers, forClass(byte[].class), APPLICATION_OCTET_STREAM); assertHasMessageWriter(writers, forClass(ByteBuffer.class), APPLICATION_OCTET_STREAM); assertHasMessageWriter(writers, forClass(String.class), TEXT_PLAIN); assertHasMessageWriter(writers, forClass(Resource.class), IMAGE_PNG); assertHasMessageWriter(writers, forClass(Message.class), new MediaType("application", "x-protobuf")); assertHasMessageWriter(writers, forClass(TestBean.class), APPLICATION_XML); assertHasMessageWriter(writers, forClass(TestBean.class), APPLICATION_JSON); assertHasMessageWriter(writers, forClass(TestBean.class), new MediaType("application", "x-jackson-smile")); assertHasMessageWriter(writers, forClass(TestBean.class), MediaType.parseMediaType("text/event-stream")); name = "webFluxContentTypeResolver"; RequestedContentTypeResolver resolver = context.getBean(name, RequestedContentTypeResolver.class); assertSame(resolver, handler.getContentTypeResolver()); }
@Override public boolean supports(HandlerResult result) { Class<?> returnType = result.getReturnType().getRawClass(); if (isSupportedType(returnType)) { return true; } else { ReactiveAdapter adapter = getAdapterRegistry().getAdapter(returnType, result.getReturnValue()); if (adapter != null && !adapter.isMultiValue() && !adapter.isNoValue()) { ResolvableType genericType = result.getReturnType().getGeneric(0); return isSupportedType(genericType.getRawClass()); } } return false; }
ReactiveAdapter adapter = getAdapterRegistry().getAdapter(rawClass, optionalValue); return writeBody(httpEntity.getBody(), bodyType, exchange); });
@Test public void defaultOrder() throws Exception { assertEquals(0, this.resultHandler.getOrder()); }
private ResponseEntityResultHandler createHandler(HttpMessageWriter<?>... writers) { List<HttpMessageWriter<?>> writerList; if (ObjectUtils.isEmpty(writers)) { writerList = new ArrayList<>(); writerList.add(new EncoderHttpMessageWriter<>(new ByteBufferEncoder())); writerList.add(new EncoderHttpMessageWriter<>(CharSequenceEncoder.textPlainOnly())); writerList.add(new ResourceHttpMessageWriter()); writerList.add(new EncoderHttpMessageWriter<>(new Jaxb2XmlEncoder())); writerList.add(new EncoderHttpMessageWriter<>(new Jackson2JsonEncoder())); writerList.add(new EncoderHttpMessageWriter<>(CharSequenceEncoder.allMimeTypes())); } else { writerList = Arrays.asList(writers); } RequestedContentTypeResolver resolver = new RequestedContentTypeResolverBuilder().build(); return new ResponseEntityResultHandler(writerList, resolver); }
/** * Constructor with an additional {@link ReactiveAdapterRegistry}. * * @param messageWriters writers for serializing to the response body stream * @param contentTypeResolver for resolving the requested content type * @param adapterRegistry for adapting other reactive types (e.g. rx.Observable, * rx.Single, etc.) to Flux or Mono */ public ResponseEntityResultHandler(List<HttpMessageWriter<?>> messageWriters, RequestedContentTypeResolver contentTypeResolver, ReactiveAdapterRegistry adapterRegistry) { super(messageWriters, contentTypeResolver, adapterRegistry); setOrder(0); }
@Bean public ResponseEntityResultHandler responseEntityResultHandler() { return new ResponseEntityResultHandler( getMessageWriters(), webReactiveContentTypeResolver(), webReactiveAdapterRegistry()); }