Polish byte-range resource handling

This commit is contained in:
Brian Clozel
2016-09-20 23:46:21 +02:00
parent 129d7bef6e
commit 578af59f0c
4 changed files with 34 additions and 29 deletions

View File

@@ -54,7 +54,6 @@ import org.springframework.web.reactive.HandlerMapping;
import org.springframework.web.reactive.accept.CompositeContentTypeResolver;
import org.springframework.web.reactive.accept.PathExtensionContentTypeResolver;
import org.springframework.web.server.MethodNotAllowedException;
import org.springframework.web.server.ResponseStatusException;
import org.springframework.web.server.ServerWebExchange;
import org.springframework.web.server.WebHandler;
@@ -331,6 +330,7 @@ public class ResourceWebHandler
// Content phase
if (HttpMethod.HEAD.equals(exchange.getRequest().getMethod())) {
setHeaders(exchange, resource, mediaType);
exchange.getResponse().getHeaders().set(HttpHeaders.ACCEPT_RANGES, "bytes");
logger.trace("HEAD request - skipping content");
return Mono.empty();
}
@@ -340,7 +340,7 @@ public class ResourceWebHandler
null, ResolvableType.forClass(Resource.class), mediaType,
exchange.getRequest(), exchange.getResponse(), Collections.emptyMap());
}
catch (IOException|ResponseStatusException ex) {
catch (IOException ex) {
return Mono.error(ex);
}
});
@@ -503,7 +503,6 @@ public class ResourceWebHandler
HttpHeaders resourceHeaders = ((HttpResource) resource).getResponseHeaders();
exchange.getResponse().getHeaders().putAll(resourceHeaders);
}
headers.set(HttpHeaders.ACCEPT_RANGES, "bytes");
}

View File

@@ -525,10 +525,10 @@ public class ResourceWebHandlerTests {
this.request.addHeader("Range", "bytes= foo bar");
this.exchange.getAttributes().put(PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE, "foo.txt");
TestSubscriber.subscribe(this.handler.handle(this.exchange))
.assertErrorWith(throwable -> {
assertThat(throwable, instanceOf(IllegalArgumentException.class));
});
TestSubscriber.subscribe(this.handler.handle(this.exchange)).assertComplete();
assertEquals(HttpStatus.REQUESTED_RANGE_NOT_SATISFIABLE, this.response.getStatusCode());
assertEquals("bytes", this.response.getHeaders().getFirst("Accept-Ranges"));
}
@Test