Order ViewResolver's

This commit is contained in:
Rossen Stoyanchev
2016-05-05 20:53:12 -04:00
parent 4d9126a474
commit aadbf1d8a6
2 changed files with 33 additions and 1 deletions

View File

@@ -25,6 +25,7 @@ import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.AnnotationAwareOrderComparator;
import org.springframework.core.convert.ConversionService;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.util.Assert;
@@ -59,6 +60,7 @@ public class ViewResolverResultHandler implements HandlerResultHandler, Ordered
Assert.notEmpty(resolvers, "At least one ViewResolver is required.");
Assert.notNull(service, "'conversionService' is required.");
this.viewResolvers.addAll(resolvers);
AnnotationAwareOrderComparator.sort(this.viewResolvers);
this.conversionService = service;
}

View File

@@ -35,6 +35,7 @@ import reactor.core.publisher.Mono;
import reactor.core.test.TestSubscriber;
import rx.Single;
import org.springframework.core.Ordered;
import org.springframework.core.ResolvableType;
import org.springframework.core.convert.support.DefaultConversionService;
import org.springframework.core.convert.support.ReactiveStreamsToRxJava1Converter;
@@ -190,6 +191,23 @@ public class ViewResolverResultHandlerTests {
assertThat(ex.getMessage(), endsWith("neither returned a view name nor a View object")));
}
@Test
public void ordered() throws Exception {
TestViewResolver resolver1 = new TestViewResolver();
TestViewResolver resolver2 = new TestViewResolver();
List<ViewResolver> resolvers = Arrays.asList(resolver1, resolver2);
resolver1.setOrder(2);
resolver2.setOrder(1);
ViewResolverResultHandler resultHandler =
new ViewResolverResultHandler(resolvers, this.conversionService);
assertEquals(Arrays.asList(resolver2, resolver1), resultHandler.getViewResolvers());
}
private TestSubscriber<Void> handle(HandlerResultHandler handler, Object value, ResolvableType type) {
HandlerResult result = new HandlerResult(new Object(), value, type, this.model);
Mono<Void> mono = handler.handleResult(this.exchange, result);
@@ -210,10 +228,21 @@ public class ViewResolverResultHandlerTests {
}
private static class TestViewResolver implements ViewResolver {
private static class TestViewResolver implements ViewResolver, Ordered {
private final Map<String, View> views = new HashMap<>();
private int order = Ordered.LOWEST_PRECEDENCE;
public void setOrder(int order) {
this.order = order;
}
@Override
public int getOrder() {
return this.order;
}
public TestViewResolver addView(TestView view) {
this.views.put(view.getName(), view);
@@ -225,6 +254,7 @@ public class ViewResolverResultHandlerTests {
View view = this.views.get(viewName);
return Mono.justOrEmpty(view);
}
}
public static final class TestView implements View {