Polishing
This commit is contained in:
@@ -90,7 +90,6 @@ public abstract class AbstractNamedValueMethodArgumentResolver implements Handle
|
||||
|
||||
@Override
|
||||
public Object resolveArgument(MethodParameter parameter, Message<?> message) throws Exception {
|
||||
|
||||
NamedValueInfo namedValueInfo = getNamedValueInfo(parameter);
|
||||
MethodParameter nestedParameter = parameter.nestedIfOptional();
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2019 the original author or authors.
|
||||
* Copyright 2002-2020 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -158,7 +158,7 @@ public class MockMultipartHttpServletRequest extends MockHttpServletRequest impl
|
||||
String contentType = getMultipartContentType(paramOrFileName);
|
||||
if (contentType != null) {
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.add("Content-Type", contentType);
|
||||
headers.add(HttpHeaders.CONTENT_TYPE, contentType);
|
||||
return headers;
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -84,7 +84,8 @@ public class RequestPartServletServerHttpRequest extends ServletServerHttpReques
|
||||
@Override
|
||||
public InputStream getBody() throws IOException {
|
||||
// Prefer Servlet Part resolution to cover file as well as parameter streams
|
||||
if (this.multipartRequest instanceof StandardMultipartHttpServletRequest) {
|
||||
boolean servletParts = (this.multipartRequest instanceof StandardMultipartHttpServletRequest);
|
||||
if (servletParts) {
|
||||
Part part = retrieveServletPart();
|
||||
if (part != null) {
|
||||
return part.getInputStream();
|
||||
@@ -102,9 +103,11 @@ public class RequestPartServletServerHttpRequest extends ServletServerHttpReques
|
||||
}
|
||||
|
||||
// Fallback: Servlet Part resolution even if not indicated
|
||||
Part part = retrieveServletPart();
|
||||
if (part != null) {
|
||||
return part.getInputStream();
|
||||
if (!servletParts) {
|
||||
Part part = retrieveServletPart();
|
||||
if (part != null) {
|
||||
return part.getInputStream();
|
||||
}
|
||||
}
|
||||
|
||||
throw new IllegalStateException("No body available for request part '" + this.requestPartName + "'");
|
||||
|
||||
@@ -139,12 +139,11 @@ public class RequestPartServletServerHttpRequestTests {
|
||||
assertThat(result).isEqualTo(bytes);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Test // gh-25829
|
||||
public void getBodyViaRequestPart() throws Exception {
|
||||
byte[] bytes = "content".getBytes("UTF-8");
|
||||
MockPart mockPart = new MockPart("part", bytes);
|
||||
mockPart.getHeaders().setContentType(MediaType.APPLICATION_JSON);
|
||||
mockRequest.addPart(mockPart);
|
||||
this.mockRequest.addPart(mockPart);
|
||||
ServerHttpRequest request = new RequestPartServletServerHttpRequest(this.mockRequest, "part");
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2019 the original author or authors.
|
||||
* Copyright 2002-2020 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -158,7 +158,7 @@ public class MockMultipartHttpServletRequest extends MockHttpServletRequest impl
|
||||
String contentType = getMultipartContentType(paramOrFileName);
|
||||
if (contentType != null) {
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.add("Content-Type", contentType);
|
||||
headers.add(HttpHeaders.CONTENT_TYPE, contentType);
|
||||
return headers;
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -92,7 +92,7 @@ public abstract class AbstractNamedValueArgumentResolver extends HandlerMethodAr
|
||||
NamedValueInfo namedValueInfo = getNamedValueInfo(parameter);
|
||||
MethodParameter nestedParameter = parameter.nestedIfOptional();
|
||||
|
||||
Object resolvedName = resolveStringValue(namedValueInfo.name);
|
||||
Object resolvedName = resolveEmbeddedValuesAndExpressions(namedValueInfo.name);
|
||||
if (resolvedName == null) {
|
||||
return Mono.error(new IllegalArgumentException(
|
||||
"Specified name must not resolve to null: [" + namedValueInfo.name + "]"));
|
||||
@@ -103,7 +103,7 @@ public abstract class AbstractNamedValueArgumentResolver extends HandlerMethodAr
|
||||
return resolveName(resolvedName.toString(), nestedParameter, exchange)
|
||||
.flatMap(arg -> {
|
||||
if ("".equals(arg) && namedValueInfo.defaultValue != null) {
|
||||
arg = resolveStringValue(namedValueInfo.defaultValue);
|
||||
arg = resolveEmbeddedValuesAndExpressions(namedValueInfo.defaultValue);
|
||||
}
|
||||
arg = applyConversion(arg, namedValueInfo, parameter, bindingContext, exchange);
|
||||
handleResolvedValue(arg, namedValueInfo.name, parameter, model, exchange);
|
||||
@@ -158,7 +158,7 @@ public abstract class AbstractNamedValueArgumentResolver extends HandlerMethodAr
|
||||
* potentially containing placeholders and expressions.
|
||||
*/
|
||||
@Nullable
|
||||
private Object resolveStringValue(String value) {
|
||||
private Object resolveEmbeddedValuesAndExpressions(String value) {
|
||||
if (this.configurableBeanFactory == null || this.expressionContext == null) {
|
||||
return value;
|
||||
}
|
||||
@@ -209,7 +209,7 @@ public abstract class AbstractNamedValueArgumentResolver extends HandlerMethodAr
|
||||
return Mono.fromSupplier(() -> {
|
||||
Object value = null;
|
||||
if (namedValueInfo.defaultValue != null) {
|
||||
value = resolveStringValue(namedValueInfo.defaultValue);
|
||||
value = resolveEmbeddedValuesAndExpressions(namedValueInfo.defaultValue);
|
||||
}
|
||||
else if (namedValueInfo.required && !parameter.isOptional()) {
|
||||
handleMissingValue(namedValueInfo.name, parameter, exchange);
|
||||
|
||||
Reference in New Issue
Block a user