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

View File

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

View File

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