From 1de73b9b4f9bed3dcc4f5f7de8382633a273bd64 Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Mon, 10 Oct 2016 05:45:37 -0400 Subject: [PATCH] Polish --- .../config/WebReactiveConfiguration.java | 18 ++-- .../RequestMappingHandlerAdapter.java | 83 ++++++++++--------- .../Jackson2ServerHttpMessageWriter.java | 7 ++ .../ServerSentEventHttpMessageWriter.java | 8 +- .../support/DefaultDataBinderFactory.java | 12 +-- 5 files changed, 72 insertions(+), 56 deletions(-) diff --git a/spring-web-reactive/src/main/java/org/springframework/web/reactive/config/WebReactiveConfiguration.java b/spring-web-reactive/src/main/java/org/springframework/web/reactive/config/WebReactiveConfiguration.java index 081bae89b1d..4e1ecd13555 100644 --- a/spring-web-reactive/src/main/java/org/springframework/web/reactive/config/WebReactiveConfiguration.java +++ b/spring-web-reactive/src/main/java/org/springframework/web/reactive/config/WebReactiveConfiguration.java @@ -86,8 +86,10 @@ import org.springframework.web.server.ServerWebExchange; public class WebReactiveConfiguration implements ApplicationContextAware { private static final boolean jackson2Present = - ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", WebReactiveConfiguration.class.getClassLoader()) && - ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator", WebReactiveConfiguration.class.getClassLoader()); + ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", + WebReactiveConfiguration.class.getClassLoader()) && + ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator", + WebReactiveConfiguration.class.getClassLoader()); private static final boolean jaxb2Present = ClassUtils.isPresent("javax.xml.bind.Binder", WebReactiveConfiguration.class.getClassLoader()); @@ -318,7 +320,8 @@ public class WebReactiveConfiguration implements ApplicationContextAware { readers.add(new DecoderHttpMessageReader<>(new Jaxb2XmlDecoder())); } if (jackson2Present) { - readers.add(new Jackson2ServerHttpMessageReader(new DecoderHttpMessageReader<>(new Jackson2JsonDecoder()))); + readers.add(new Jackson2ServerHttpMessageReader( + new DecoderHttpMessageReader<>(new Jackson2JsonDecoder()))); } } @@ -454,10 +457,11 @@ public class WebReactiveConfiguration implements ApplicationContextAware { writers.add(new EncoderHttpMessageWriter<>(new Jaxb2XmlEncoder())); } if (jackson2Present) { - Jackson2JsonEncoder jacksonEncoder = new Jackson2JsonEncoder(); - writers.add(new Jackson2ServerHttpMessageWriter(new EncoderHttpMessageWriter<>(jacksonEncoder))); - sseDataEncoders.add(jacksonEncoder); - writers.add(new Jackson2ServerHttpMessageWriter(new ServerSentEventHttpMessageWriter(sseDataEncoders))); + Jackson2JsonEncoder encoder = new Jackson2JsonEncoder(); + writers.add(new Jackson2ServerHttpMessageWriter(encoder)); + sseDataEncoders.add(encoder); + HttpMessageWriter writer = new ServerSentEventHttpMessageWriter(sseDataEncoders); + writers.add(new Jackson2ServerHttpMessageWriter(writer)); } else { writers.add(new ServerSentEventHttpMessageWriter(sseDataEncoders)); diff --git a/spring-web-reactive/src/main/java/org/springframework/web/reactive/result/method/annotation/RequestMappingHandlerAdapter.java b/spring-web-reactive/src/main/java/org/springframework/web/reactive/result/method/annotation/RequestMappingHandlerAdapter.java index b8f86d17ee8..dcfea44c001 100644 --- a/spring-web-reactive/src/main/java/org/springframework/web/reactive/result/method/annotation/RequestMappingHandlerAdapter.java +++ b/spring-web-reactive/src/main/java/org/springframework/web/reactive/result/method/annotation/RequestMappingHandlerAdapter.java @@ -61,15 +61,15 @@ public class RequestMappingHandlerAdapter implements HandlerAdapter, BeanFactory private static final Log logger = LogFactory.getLog(RequestMappingHandlerAdapter.class); - private List customArgumentResolvers; - - private List argumentResolvers; - private final List> messageReaders = new ArrayList<>(10); + private WebBindingInitializer webBindingInitializer; + private ReactiveAdapterRegistry reactiveAdapters = new ReactiveAdapterRegistry(); - private WebBindingInitializer webBindingInitializer; + private List customArgumentResolvers; + + private List argumentResolvers; private ConversionService conversionService = new DefaultFormattingConversionService(); @@ -77,7 +77,8 @@ public class RequestMappingHandlerAdapter implements HandlerAdapter, BeanFactory private ConfigurableBeanFactory beanFactory; - private final Map, ExceptionHandlerMethodResolver> exceptionHandlerCache = new ConcurrentHashMap<>(64); + private final Map, ExceptionHandlerMethodResolver> exceptionHandlerCache = + new ConcurrentHashMap<>(64); @@ -88,47 +89,33 @@ public class RequestMappingHandlerAdapter implements HandlerAdapter, BeanFactory /** - * Provide custom argument resolvers without overriding the built-in ones. - */ - public void setCustomArgumentResolvers(List argumentResolvers) { - this.customArgumentResolvers = argumentResolvers; - } - - /** - * Return the custom argument resolvers. - */ - public List getCustomArgumentResolvers() { - return this.customArgumentResolvers; - } - - /** - * Configure the complete list of supported argument types thus overriding - * the resolvers that would otherwise be configured by default. + * Configure message readers to de-serialize the request body with. */ - public void setArgumentResolvers(List resolvers) { - this.argumentResolvers = new ArrayList<>(resolvers); + public void setMessageReaders(List> messageReaders) { + this.messageReaders.clear(); + this.messageReaders.addAll(messageReaders); } /** - * Return the configured argument resolvers. + * Return the configured message readers. */ - public List getArgumentResolvers() { - return this.argumentResolvers; + public List> getMessageReaders() { + return this.messageReaders; } /** - * Configure message readers to de-serialize the request body with. + * Provide a WebBindingInitializer with "global" initialization to apply + * to every DataBinder instance. */ - public void setMessageReaders(List> messageReaders) { - this.messageReaders.clear(); - this.messageReaders.addAll(messageReaders); + public void setWebBindingInitializer(WebBindingInitializer webBindingInitializer) { + this.webBindingInitializer = webBindingInitializer; } /** - * Return the configured message readers. + * Return the configured WebBindingInitializer, or {@code null} if none. */ - public List> getMessageReaders() { - return this.messageReaders; + public WebBindingInitializer getWebBindingInitializer() { + return this.webBindingInitializer; } public void setReactiveAdapterRegistry(ReactiveAdapterRegistry registry) { @@ -140,18 +127,32 @@ public class RequestMappingHandlerAdapter implements HandlerAdapter, BeanFactory } /** - * Provide a WebBindingInitializer with "global" initialization to apply - * to every DataBinder instance. + * Provide custom argument resolvers without overriding the built-in ones. */ - public void setWebBindingInitializer(WebBindingInitializer webBindingInitializer) { - this.webBindingInitializer = webBindingInitializer; + public void setCustomArgumentResolvers(List argumentResolvers) { + this.customArgumentResolvers = argumentResolvers; } /** - * Return the configured WebBindingInitializer, or {@code null} if none. + * Return the custom argument resolvers. */ - public WebBindingInitializer getWebBindingInitializer() { - return this.webBindingInitializer; + public List getCustomArgumentResolvers() { + return this.customArgumentResolvers; + } + + /** + * Configure the complete list of supported argument types thus overriding + * the resolvers that would otherwise be configured by default. + */ + public void setArgumentResolvers(List resolvers) { + this.argumentResolvers = new ArrayList<>(resolvers); + } + + /** + * Return the configured argument resolvers. + */ + public List getArgumentResolvers() { + return this.argumentResolvers; } /** diff --git a/spring-web/src/main/java/org/springframework/http/codec/Jackson2ServerHttpMessageWriter.java b/spring-web/src/main/java/org/springframework/http/codec/Jackson2ServerHttpMessageWriter.java index 62ef7dc694a..7a8ee553724 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/Jackson2ServerHttpMessageWriter.java +++ b/spring-web/src/main/java/org/springframework/http/codec/Jackson2ServerHttpMessageWriter.java @@ -24,6 +24,7 @@ import com.fasterxml.jackson.annotation.JsonView; import org.springframework.core.MethodParameter; import org.springframework.core.ResolvableType; +import org.springframework.core.codec.Encoder; import org.springframework.http.MediaType; import org.springframework.http.codec.json.AbstractJackson2Codec; import org.springframework.http.server.reactive.ServerHttpRequest; @@ -40,10 +41,16 @@ import org.springframework.http.server.reactive.ServerHttpRequest; */ public class Jackson2ServerHttpMessageWriter extends AbstractServerHttpMessageWriter { + + public Jackson2ServerHttpMessageWriter(Encoder encoder) { + super(new EncoderHttpMessageWriter<>(encoder)); + } + public Jackson2ServerHttpMessageWriter(HttpMessageWriter writer) { super(writer); } + @Override protected Map resolveWriteHints(ResolvableType streamType, ResolvableType elementType, MediaType mediaType, ServerHttpRequest request) { diff --git a/spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageWriter.java b/spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageWriter.java index d5348a1b663..0bef29e1fce 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageWriter.java +++ b/spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageWriter.java @@ -17,6 +17,7 @@ package org.springframework.http.codec; import java.nio.charset.StandardCharsets; +import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; @@ -47,20 +48,21 @@ import org.springframework.util.MimeTypeUtils; */ public class ServerSentEventHttpMessageWriter implements HttpMessageWriter { - private static final MediaType TEXT_EVENT_STREAM = - new MediaType("text", "event-stream"); + private static final MediaType TEXT_EVENT_STREAM = new MediaType("text", "event-stream"); private final List> dataEncoders; + public ServerSentEventHttpMessageWriter() { this.dataEncoders = Collections.emptyList(); } public ServerSentEventHttpMessageWriter(List> dataEncoders) { Assert.notNull(dataEncoders, "'dataEncoders' must not be null"); - this.dataEncoders = dataEncoders; + this.dataEncoders = new ArrayList<>(dataEncoders); } + @Override public boolean canWrite(ResolvableType elementType, MediaType mediaType) { return mediaType == null || TEXT_EVENT_STREAM.isCompatibleWith(mediaType) || diff --git a/spring-web/src/main/java/org/springframework/web/bind/support/DefaultDataBinderFactory.java b/spring-web/src/main/java/org/springframework/web/bind/support/DefaultDataBinderFactory.java index 1df05ee1411..53e5a0abd0c 100644 --- a/spring-web/src/main/java/org/springframework/web/bind/support/DefaultDataBinderFactory.java +++ b/spring-web/src/main/java/org/springframework/web/bind/support/DefaultDataBinderFactory.java @@ -48,8 +48,8 @@ public class DefaultDataBinderFactory implements WebDataBinderFactory { */ @Override @SuppressWarnings("deprecation") - public final WebDataBinder createBinder(NativeWebRequest webRequest, Object target, String objectName) - throws Exception { + public final WebDataBinder createBinder(NativeWebRequest webRequest, Object target, + String objectName) throws Exception { WebDataBinder dataBinder = createBinderInstance(target, objectName, webRequest); if (this.initializer != null) { @@ -67,8 +67,8 @@ public class DefaultDataBinderFactory implements WebDataBinderFactory { * @param webRequest the current request * @throws Exception in case of invalid state or arguments */ - protected WebDataBinder createBinderInstance(Object target, String objectName, NativeWebRequest webRequest) - throws Exception { + protected WebDataBinder createBinderInstance(Object target, String objectName, + NativeWebRequest webRequest) throws Exception { return new WebRequestDataBinder(target, objectName); } @@ -81,7 +81,9 @@ public class DefaultDataBinderFactory implements WebDataBinderFactory { * @param webRequest the current request * @throws Exception if initialization fails */ - protected void initBinder(WebDataBinder dataBinder, NativeWebRequest webRequest) throws Exception { + protected void initBinder(WebDataBinder dataBinder, NativeWebRequest webRequest) + throws Exception { + } }