Browse Source

Minor refactoring in DefaultServerRequest

Ensure bind logic is shared across DefaultServerRequest and
BuiltServerRequest.

See gh-35800
pull/35899/head
rstoyanchev 2 months ago
parent
commit
b29f4ed37e
  1. 10
      spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultServerRequest.java
  2. 28
      spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultServerRequestBuilder.java

10
spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultServerRequest.java

@ -246,8 +246,15 @@ class DefaultServerRequest implements ServerRequest { @@ -246,8 +246,15 @@ class DefaultServerRequest implements ServerRequest {
}
@Override
@SuppressWarnings("unchecked")
public <T> T bind(Class<T> bindType, Consumer<WebDataBinder> dataBinderCustomizer) throws BindException {
return doBind(bindType, dataBinderCustomizer, servletRequest());
}
@SuppressWarnings("unchecked")
static <T> T doBind(
Class<T> bindType, Consumer<WebDataBinder> dataBinderCustomizer, HttpServletRequest servletRequest)
throws BindException {
Assert.notNull(bindType, "BindType must not be null");
Assert.notNull(dataBinderCustomizer, "DataBinderCustomizer must not be null");
@ -255,7 +262,6 @@ class DefaultServerRequest implements ServerRequest { @@ -255,7 +262,6 @@ class DefaultServerRequest implements ServerRequest {
dataBinder.setTargetType(ResolvableType.forClass(bindType));
dataBinderCustomizer.accept(dataBinder);
HttpServletRequest servletRequest = servletRequest();
dataBinder.construct(servletRequest);
dataBinder.bind(servletRequest);

28
spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultServerRequestBuilder.java

@ -55,10 +55,8 @@ import org.springframework.util.Assert; @@ -55,10 +55,8 @@ import org.springframework.util.Assert;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.validation.BindException;
import org.springframework.validation.BindingResult;
import org.springframework.web.HttpMediaTypeNotSupportedException;
import org.springframework.web.accept.ApiVersionStrategy;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.util.UriBuilder;
import org.springframework.web.util.UriComponentsBuilder;
@ -343,32 +341,8 @@ class DefaultServerRequestBuilder implements ServerRequest.Builder { @@ -343,32 +341,8 @@ class DefaultServerRequestBuilder implements ServerRequest.Builder {
}
@Override
@SuppressWarnings("unchecked")
public <T> T bind(Class<T> bindType, Consumer<WebDataBinder> dataBinderCustomizer) throws BindException {
Assert.notNull(bindType, "BindType must not be null");
Assert.notNull(dataBinderCustomizer, "DataBinderCustomizer must not be null");
ServletRequestDataBinder dataBinder = new ServletRequestDataBinder(null);
dataBinder.setTargetType(ResolvableType.forClass(bindType));
dataBinderCustomizer.accept(dataBinder);
HttpServletRequest servletRequest = servletRequest();
dataBinder.construct(servletRequest);
dataBinder.bind(servletRequest);
BindingResult bindingResult = dataBinder.getBindingResult();
if (bindingResult.hasErrors()) {
throw new BindException(bindingResult);
}
else {
T result = (T) bindingResult.getTarget();
if (result != null) {
return result;
}
else {
throw new IllegalStateException("Binding result has neither target nor errors");
}
}
return DefaultServerRequest.doBind(bindType, dataBinderCustomizer, servletRequest());
}
@Override

Loading…
Cancel
Save