Polish result handlers default order

This commit is contained in:
Rossen Stoyanchev
2016-05-26 16:14:18 -04:00
parent bc782902d7
commit 91a5759cf5
3 changed files with 19 additions and 11 deletions

View File

@@ -56,6 +56,13 @@ public class SimpleResultHandler implements Ordered, HandlerResultHandler {
}
/**
* Set the order for this result handler relative to others.
* <p>By default this is set to {@link Ordered#LOWEST_PRECEDENCE} and is
* generally safe to use late in the order since it looks specifically for
* {@code void} or async return types parameterized by {@code void}.
* @param order the order
*/
public void setOrder(int order) {
this.order = order;
}

View File

@@ -70,6 +70,14 @@ public class ViewResolverResultHandler implements HandlerResultHandler, Ordered
return Collections.unmodifiableList(this.viewResolvers);
}
/**
* Set the order for this result handler relative to others.
* <p>By default this is set to {@link Ordered#LOWEST_PRECEDENCE} and
* generally needs to be used late in the order since it interprets any
* String return value as a view name while others may interpret the same
* otherwise based on annotations (e.g. for {@code @ResponseBody}).
* @param order the order
*/
public void setOrder(int order) {
this.order = order;
}
@@ -79,7 +87,7 @@ public class ViewResolverResultHandler implements HandlerResultHandler, Ordered
return this.order;
}
// TODO: Add support for model-related return value (Model, ModelAndView, @ModelAttribute)
// TODO: Support for Model, ModelAndView, @ModelAttribute, Object with no method annotations
@Override
public boolean supports(HandlerResult result) {

View File

@@ -415,25 +415,18 @@ public class RequestMappingIntegrationTests extends AbstractHttpHandlerIntegrati
new CodecHttpMessageConverter<>(new ByteBufferEncoder(), new ByteBufferDecoder()),
new CodecHttpMessageConverter<>(new StringEncoder(), new StringDecoder()),
new CodecHttpMessageConverter<>(new JacksonJsonEncoder(), new JacksonJsonDecoder()));
ResponseBodyResultHandler resultHandler =
new ResponseBodyResultHandler(converters, conversionService());
resultHandler.setOrder(1);
return resultHandler;
return new ResponseBodyResultHandler(converters, conversionService());
}
@Bean
public SimpleResultHandler simpleHandlerResultHandler() {
SimpleResultHandler resultHandler = new SimpleResultHandler(conversionService());
resultHandler.setOrder(2);
return resultHandler;
return new SimpleResultHandler(conversionService());
}
@Bean
public ViewResolverResultHandler viewResolverResultHandler() {
List<ViewResolver> resolvers = Collections.singletonList(freeMarkerViewResolver());
ViewResolverResultHandler resultHandler = new ViewResolverResultHandler(resolvers, conversionService());
resultHandler.setOrder(3);
return resultHandler;
return new ViewResolverResultHandler(resolvers, conversionService());
}
@Bean