mirror of
https://github.com/spring-projects/spring-framework.git
synced 2026-10-03 13:39:34 +00:00
Minor refactoring in DefaultServerRequest
Ensure bind logic is shared across DefaultServerRequest and BuiltServerRequest. See gh-35800
This commit is contained in:
+8
-2
@@ -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 {
|
||||
dataBinder.setTargetType(ResolvableType.forClass(bindType));
|
||||
dataBinderCustomizer.accept(dataBinder);
|
||||
|
||||
HttpServletRequest servletRequest = servletRequest();
|
||||
dataBinder.construct(servletRequest);
|
||||
dataBinder.bind(servletRequest);
|
||||
|
||||
|
||||
+1
-27
@@ -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 {
|
||||
}
|
||||
|
||||
@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
|
||||
|
||||
Reference in New Issue
Block a user