From e176c4e7991a279badbb61a50b90efd1d0aac8a7 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Mon, 12 Oct 2020 19:40:50 +0200 Subject: [PATCH] Polishing --- .../AbstractNamedValueMethodArgumentResolver.java | 1 - .../mock/web/MockMultipartHttpServletRequest.java | 4 ++-- .../support/RequestPartServletServerHttpRequest.java | 11 +++++++---- .../RequestPartServletServerHttpRequestTests.java | 3 +-- .../servlet/MockMultipartHttpServletRequest.java | 4 ++-- .../AbstractNamedValueArgumentResolver.java | 8 ++++---- 6 files changed, 16 insertions(+), 15 deletions(-) diff --git a/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/support/AbstractNamedValueMethodArgumentResolver.java b/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/support/AbstractNamedValueMethodArgumentResolver.java index 1bfc2bc397..e1df3e0c09 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/support/AbstractNamedValueMethodArgumentResolver.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/support/AbstractNamedValueMethodArgumentResolver.java @@ -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(); diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockMultipartHttpServletRequest.java b/spring-test/src/main/java/org/springframework/mock/web/MockMultipartHttpServletRequest.java index b438a4fe7d..f9607f5bb2 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/MockMultipartHttpServletRequest.java +++ b/spring-test/src/main/java/org/springframework/mock/web/MockMultipartHttpServletRequest.java @@ -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 { diff --git a/spring-web/src/main/java/org/springframework/web/multipart/support/RequestPartServletServerHttpRequest.java b/spring-web/src/main/java/org/springframework/web/multipart/support/RequestPartServletServerHttpRequest.java index 8e998b91cd..b18657ee3b 100644 --- a/spring-web/src/main/java/org/springframework/web/multipart/support/RequestPartServletServerHttpRequest.java +++ b/spring-web/src/main/java/org/springframework/web/multipart/support/RequestPartServletServerHttpRequest.java @@ -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 + "'"); diff --git a/spring-web/src/test/java/org/springframework/web/multipart/support/RequestPartServletServerHttpRequestTests.java b/spring-web/src/test/java/org/springframework/web/multipart/support/RequestPartServletServerHttpRequestTests.java index 05076d1e01..b9c0e2ee90 100644 --- a/spring-web/src/test/java/org/springframework/web/multipart/support/RequestPartServletServerHttpRequestTests.java +++ b/spring-web/src/test/java/org/springframework/web/multipart/support/RequestPartServletServerHttpRequestTests.java @@ -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"); diff --git a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockMultipartHttpServletRequest.java b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockMultipartHttpServletRequest.java index 88757b539a..ace2e125c5 100644 --- a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockMultipartHttpServletRequest.java +++ b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockMultipartHttpServletRequest.java @@ -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 { diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/AbstractNamedValueArgumentResolver.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/AbstractNamedValueArgumentResolver.java index 9c0fb6021e..bac576326e 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/AbstractNamedValueArgumentResolver.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/AbstractNamedValueArgumentResolver.java @@ -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);