Expose all HttpResource header values (even if commonly not multi-value)

Issue: SPR-14264
This commit is contained in:
Juergen Hoeller 2017-11-20 15:31:34 +01:00
parent 84699c8b9b
commit 27bbb73583
3 changed files with 17 additions and 8 deletions

View File

@ -158,7 +158,7 @@ public class GzipResourceResolver extends AbstractResourceResolver {
@Override
public HttpHeaders getResponseHeaders() {
HttpHeaders headers;
if(this.original instanceof HttpResource) {
if (this.original instanceof HttpResource) {
headers = ((HttpResource) this.original).getResponseHeaders();
}
else {
@ -167,7 +167,6 @@ public class GzipResourceResolver extends AbstractResourceResolver {
headers.add(HttpHeaders.CONTENT_ENCODING, "gzip");
return headers;
}
}
}

View File

@ -493,8 +493,8 @@ public class ResourceHttpRequestHandler extends WebContentGenerator
try {
List<HttpRange> httpRanges = inputMessage.getHeaders().getRange();
response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT);
this.resourceRegionHttpMessageConverter.write(
HttpRange.toResourceRegions(httpRanges, resource), mediaType, outputMessage);
this.resourceRegionHttpMessageConverter.write(
HttpRange.toResourceRegions(httpRanges, resource), mediaType, outputMessage);
}
catch (IllegalArgumentException ex) {
response.setHeader("Content-Range", "bytes */" + resource.contentLength());
@ -654,8 +654,19 @@ public class ResourceHttpRequestHandler extends WebContentGenerator
}
if (resource instanceof HttpResource) {
HttpHeaders resourceHeaders = ((HttpResource) resource).getResponseHeaders();
resourceHeaders.toSingleValueMap().entrySet()
.stream().forEach(entry -> response.setHeader(entry.getKey(), entry.getValue()));
for (Map.Entry<String, List<String>> entry : resourceHeaders.entrySet()) {
String headerName = entry.getKey();
boolean first = true;
for (String headerValue : entry.getValue()) {
if (first) {
response.setHeader(headerName, headerValue);
}
else {
response.addHeader(headerName, headerValue);
}
first = false;
}
}
}
response.setHeader(HttpHeaders.ACCEPT_RANGES, "bytes");
}

View File

@ -328,7 +328,7 @@ public class VersionResourceResolver extends AbstractResourceResolver {
@Override
public HttpHeaders getResponseHeaders() {
HttpHeaders headers;
if(this.original instanceof HttpResource) {
if (this.original instanceof HttpResource) {
headers = ((HttpResource) this.original).getResponseHeaders();
}
else {
@ -337,7 +337,6 @@ public class VersionResourceResolver extends AbstractResourceResolver {
headers.setETag("\"" + this.version + "\"");
return headers;
}
}
}