Polish
This commit is contained in:
parent
b28b3e8877
commit
1de73b9b4f
|
@ -86,8 +86,10 @@ import org.springframework.web.server.ServerWebExchange;
|
||||||
public class WebReactiveConfiguration implements ApplicationContextAware {
|
public class WebReactiveConfiguration implements ApplicationContextAware {
|
||||||
|
|
||||||
private static final boolean jackson2Present =
|
private static final boolean jackson2Present =
|
||||||
ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", WebReactiveConfiguration.class.getClassLoader()) &&
|
ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper",
|
||||||
ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator", WebReactiveConfiguration.class.getClassLoader());
|
WebReactiveConfiguration.class.getClassLoader()) &&
|
||||||
|
ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator",
|
||||||
|
WebReactiveConfiguration.class.getClassLoader());
|
||||||
|
|
||||||
private static final boolean jaxb2Present =
|
private static final boolean jaxb2Present =
|
||||||
ClassUtils.isPresent("javax.xml.bind.Binder", WebReactiveConfiguration.class.getClassLoader());
|
ClassUtils.isPresent("javax.xml.bind.Binder", WebReactiveConfiguration.class.getClassLoader());
|
||||||
|
@ -318,7 +320,8 @@ public class WebReactiveConfiguration implements ApplicationContextAware {
|
||||||
readers.add(new DecoderHttpMessageReader<>(new Jaxb2XmlDecoder()));
|
readers.add(new DecoderHttpMessageReader<>(new Jaxb2XmlDecoder()));
|
||||||
}
|
}
|
||||||
if (jackson2Present) {
|
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()));
|
writers.add(new EncoderHttpMessageWriter<>(new Jaxb2XmlEncoder()));
|
||||||
}
|
}
|
||||||
if (jackson2Present) {
|
if (jackson2Present) {
|
||||||
Jackson2JsonEncoder jacksonEncoder = new Jackson2JsonEncoder();
|
Jackson2JsonEncoder encoder = new Jackson2JsonEncoder();
|
||||||
writers.add(new Jackson2ServerHttpMessageWriter(new EncoderHttpMessageWriter<>(jacksonEncoder)));
|
writers.add(new Jackson2ServerHttpMessageWriter(encoder));
|
||||||
sseDataEncoders.add(jacksonEncoder);
|
sseDataEncoders.add(encoder);
|
||||||
writers.add(new Jackson2ServerHttpMessageWriter(new ServerSentEventHttpMessageWriter(sseDataEncoders)));
|
HttpMessageWriter<Object> writer = new ServerSentEventHttpMessageWriter(sseDataEncoders);
|
||||||
|
writers.add(new Jackson2ServerHttpMessageWriter(writer));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
writers.add(new ServerSentEventHttpMessageWriter(sseDataEncoders));
|
writers.add(new ServerSentEventHttpMessageWriter(sseDataEncoders));
|
||||||
|
|
|
@ -61,15 +61,15 @@ public class RequestMappingHandlerAdapter implements HandlerAdapter, BeanFactory
|
||||||
private static final Log logger = LogFactory.getLog(RequestMappingHandlerAdapter.class);
|
private static final Log logger = LogFactory.getLog(RequestMappingHandlerAdapter.class);
|
||||||
|
|
||||||
|
|
||||||
private List<HandlerMethodArgumentResolver> customArgumentResolvers;
|
|
||||||
|
|
||||||
private List<HandlerMethodArgumentResolver> argumentResolvers;
|
|
||||||
|
|
||||||
private final List<HttpMessageReader<?>> messageReaders = new ArrayList<>(10);
|
private final List<HttpMessageReader<?>> messageReaders = new ArrayList<>(10);
|
||||||
|
|
||||||
|
private WebBindingInitializer webBindingInitializer;
|
||||||
|
|
||||||
private ReactiveAdapterRegistry reactiveAdapters = new ReactiveAdapterRegistry();
|
private ReactiveAdapterRegistry reactiveAdapters = new ReactiveAdapterRegistry();
|
||||||
|
|
||||||
private WebBindingInitializer webBindingInitializer;
|
private List<HandlerMethodArgumentResolver> customArgumentResolvers;
|
||||||
|
|
||||||
|
private List<HandlerMethodArgumentResolver> argumentResolvers;
|
||||||
|
|
||||||
private ConversionService conversionService = new DefaultFormattingConversionService();
|
private ConversionService conversionService = new DefaultFormattingConversionService();
|
||||||
|
|
||||||
|
@ -77,7 +77,8 @@ public class RequestMappingHandlerAdapter implements HandlerAdapter, BeanFactory
|
||||||
|
|
||||||
private ConfigurableBeanFactory beanFactory;
|
private ConfigurableBeanFactory beanFactory;
|
||||||
|
|
||||||
private final Map<Class<?>, ExceptionHandlerMethodResolver> exceptionHandlerCache = new ConcurrentHashMap<>(64);
|
private final Map<Class<?>, ExceptionHandlerMethodResolver> exceptionHandlerCache =
|
||||||
|
new ConcurrentHashMap<>(64);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -87,6 +88,44 @@ public class RequestMappingHandlerAdapter implements HandlerAdapter, BeanFactory
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configure message readers to de-serialize the request body with.
|
||||||
|
*/
|
||||||
|
public void setMessageReaders(List<HttpMessageReader<?>> messageReaders) {
|
||||||
|
this.messageReaders.clear();
|
||||||
|
this.messageReaders.addAll(messageReaders);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the configured message readers.
|
||||||
|
*/
|
||||||
|
public List<HttpMessageReader<?>> getMessageReaders() {
|
||||||
|
return this.messageReaders;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provide a WebBindingInitializer with "global" initialization to apply
|
||||||
|
* to every DataBinder instance.
|
||||||
|
*/
|
||||||
|
public void setWebBindingInitializer(WebBindingInitializer webBindingInitializer) {
|
||||||
|
this.webBindingInitializer = webBindingInitializer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the configured WebBindingInitializer, or {@code null} if none.
|
||||||
|
*/
|
||||||
|
public WebBindingInitializer getWebBindingInitializer() {
|
||||||
|
return this.webBindingInitializer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setReactiveAdapterRegistry(ReactiveAdapterRegistry registry) {
|
||||||
|
this.reactiveAdapters = registry;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ReactiveAdapterRegistry getReactiveAdapterRegistry() {
|
||||||
|
return this.reactiveAdapters;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provide custom argument resolvers without overriding the built-in ones.
|
* Provide custom argument resolvers without overriding the built-in ones.
|
||||||
*/
|
*/
|
||||||
|
@ -116,44 +155,6 @@ public class RequestMappingHandlerAdapter implements HandlerAdapter, BeanFactory
|
||||||
return this.argumentResolvers;
|
return this.argumentResolvers;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Configure message readers to de-serialize the request body with.
|
|
||||||
*/
|
|
||||||
public void setMessageReaders(List<HttpMessageReader<?>> messageReaders) {
|
|
||||||
this.messageReaders.clear();
|
|
||||||
this.messageReaders.addAll(messageReaders);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the configured message readers.
|
|
||||||
*/
|
|
||||||
public List<HttpMessageReader<?>> getMessageReaders() {
|
|
||||||
return this.messageReaders;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setReactiveAdapterRegistry(ReactiveAdapterRegistry registry) {
|
|
||||||
this.reactiveAdapters = registry;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ReactiveAdapterRegistry getReactiveAdapterRegistry() {
|
|
||||||
return this.reactiveAdapters;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provide a WebBindingInitializer with "global" initialization to apply
|
|
||||||
* to every DataBinder instance.
|
|
||||||
*/
|
|
||||||
public void setWebBindingInitializer(WebBindingInitializer webBindingInitializer) {
|
|
||||||
this.webBindingInitializer = webBindingInitializer;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the configured WebBindingInitializer, or {@code null} if none.
|
|
||||||
*/
|
|
||||||
public WebBindingInitializer getWebBindingInitializer() {
|
|
||||||
return this.webBindingInitializer;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Configure a ConversionService for type conversion of controller method
|
* Configure a ConversionService for type conversion of controller method
|
||||||
* arguments as well as for converting from different async types to
|
* arguments as well as for converting from different async types to
|
||||||
|
|
|
@ -24,6 +24,7 @@ import com.fasterxml.jackson.annotation.JsonView;
|
||||||
|
|
||||||
import org.springframework.core.MethodParameter;
|
import org.springframework.core.MethodParameter;
|
||||||
import org.springframework.core.ResolvableType;
|
import org.springframework.core.ResolvableType;
|
||||||
|
import org.springframework.core.codec.Encoder;
|
||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.http.codec.json.AbstractJackson2Codec;
|
import org.springframework.http.codec.json.AbstractJackson2Codec;
|
||||||
import org.springframework.http.server.reactive.ServerHttpRequest;
|
import org.springframework.http.server.reactive.ServerHttpRequest;
|
||||||
|
@ -40,10 +41,16 @@ import org.springframework.http.server.reactive.ServerHttpRequest;
|
||||||
*/
|
*/
|
||||||
public class Jackson2ServerHttpMessageWriter extends AbstractServerHttpMessageWriter<Object> {
|
public class Jackson2ServerHttpMessageWriter extends AbstractServerHttpMessageWriter<Object> {
|
||||||
|
|
||||||
|
|
||||||
|
public Jackson2ServerHttpMessageWriter(Encoder<Object> encoder) {
|
||||||
|
super(new EncoderHttpMessageWriter<>(encoder));
|
||||||
|
}
|
||||||
|
|
||||||
public Jackson2ServerHttpMessageWriter(HttpMessageWriter<Object> writer) {
|
public Jackson2ServerHttpMessageWriter(HttpMessageWriter<Object> writer) {
|
||||||
super(writer);
|
super(writer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Map<String, Object> resolveWriteHints(ResolvableType streamType,
|
protected Map<String, Object> resolveWriteHints(ResolvableType streamType,
|
||||||
ResolvableType elementType, MediaType mediaType, ServerHttpRequest request) {
|
ResolvableType elementType, MediaType mediaType, ServerHttpRequest request) {
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
package org.springframework.http.codec;
|
package org.springframework.http.codec;
|
||||||
|
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -47,20 +48,21 @@ import org.springframework.util.MimeTypeUtils;
|
||||||
*/
|
*/
|
||||||
public class ServerSentEventHttpMessageWriter implements HttpMessageWriter<Object> {
|
public class ServerSentEventHttpMessageWriter implements HttpMessageWriter<Object> {
|
||||||
|
|
||||||
private static final MediaType TEXT_EVENT_STREAM =
|
private static final MediaType TEXT_EVENT_STREAM = new MediaType("text", "event-stream");
|
||||||
new MediaType("text", "event-stream");
|
|
||||||
|
|
||||||
private final List<Encoder<?>> dataEncoders;
|
private final List<Encoder<?>> dataEncoders;
|
||||||
|
|
||||||
|
|
||||||
public ServerSentEventHttpMessageWriter() {
|
public ServerSentEventHttpMessageWriter() {
|
||||||
this.dataEncoders = Collections.emptyList();
|
this.dataEncoders = Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ServerSentEventHttpMessageWriter(List<Encoder<?>> dataEncoders) {
|
public ServerSentEventHttpMessageWriter(List<Encoder<?>> dataEncoders) {
|
||||||
Assert.notNull(dataEncoders, "'dataEncoders' must not be null");
|
Assert.notNull(dataEncoders, "'dataEncoders' must not be null");
|
||||||
this.dataEncoders = dataEncoders;
|
this.dataEncoders = new ArrayList<>(dataEncoders);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canWrite(ResolvableType elementType, MediaType mediaType) {
|
public boolean canWrite(ResolvableType elementType, MediaType mediaType) {
|
||||||
return mediaType == null || TEXT_EVENT_STREAM.isCompatibleWith(mediaType) ||
|
return mediaType == null || TEXT_EVENT_STREAM.isCompatibleWith(mediaType) ||
|
||||||
|
|
|
@ -48,8 +48,8 @@ public class DefaultDataBinderFactory implements WebDataBinderFactory {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public final WebDataBinder createBinder(NativeWebRequest webRequest, Object target, String objectName)
|
public final WebDataBinder createBinder(NativeWebRequest webRequest, Object target,
|
||||||
throws Exception {
|
String objectName) throws Exception {
|
||||||
|
|
||||||
WebDataBinder dataBinder = createBinderInstance(target, objectName, webRequest);
|
WebDataBinder dataBinder = createBinderInstance(target, objectName, webRequest);
|
||||||
if (this.initializer != null) {
|
if (this.initializer != null) {
|
||||||
|
@ -67,8 +67,8 @@ public class DefaultDataBinderFactory implements WebDataBinderFactory {
|
||||||
* @param webRequest the current request
|
* @param webRequest the current request
|
||||||
* @throws Exception in case of invalid state or arguments
|
* @throws Exception in case of invalid state or arguments
|
||||||
*/
|
*/
|
||||||
protected WebDataBinder createBinderInstance(Object target, String objectName, NativeWebRequest webRequest)
|
protected WebDataBinder createBinderInstance(Object target, String objectName,
|
||||||
throws Exception {
|
NativeWebRequest webRequest) throws Exception {
|
||||||
|
|
||||||
return new WebRequestDataBinder(target, objectName);
|
return new WebRequestDataBinder(target, objectName);
|
||||||
}
|
}
|
||||||
|
@ -81,7 +81,9 @@ public class DefaultDataBinderFactory implements WebDataBinderFactory {
|
||||||
* @param webRequest the current request
|
* @param webRequest the current request
|
||||||
* @throws Exception if initialization fails
|
* @throws Exception if initialization fails
|
||||||
*/
|
*/
|
||||||
protected void initBinder(WebDataBinder dataBinder, NativeWebRequest webRequest) throws Exception {
|
protected void initBinder(WebDataBinder dataBinder, NativeWebRequest webRequest)
|
||||||
|
throws Exception {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue