Spring Boot Starter Webflux 
 
Spring Webflux 5.3.2 ResponseBodyResultHandler 这个ResultHandler是最常用的一个,我们可以看到他在containingClass被ResponseBody标记或者方法被ResponseBody标记时生效
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 @Override public  boolean  supports (HandlerResult result)  {    MethodParameter  returnType  =  result.getReturnTypeSource();     Class<?> containingClass = returnType.getContainingClass();     return  (AnnotatedElementUtils.hasAnnotation(containingClass, ResponseBody.class) ||             returnType.hasMethodAnnotation(ResponseBody.class)); } @Override public  Mono<Void> handleResult (ServerWebExchange exchange, HandlerResult result)  {    Object  body  =  result.getReturnValue();     MethodParameter  bodyTypeParameter  =  result.getReturnTypeSource();     return  writeBody(body, bodyTypeParameter, exchange); } 
 
ViewResolutionResultHandler ViewResolutionResultHandler支持的attributes比较多,它可以解析CharSequence,Rendering,Model,Map,View等
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 @Override public  boolean  supports (HandlerResult result)  {    if  (hasModelAnnotation(result.getReturnTypeSource())) {         return  true ;     }     Class<?> type = result.getReturnType().toClass();     ReactiveAdapter  adapter  =  getAdapter(result);     if  (adapter != null ) {         if  (adapter.isNoValue()) {             return  true ;         }         type = result.getReturnType().getGeneric().toClass();     }     return  (CharSequence.class.isAssignableFrom(type) ||             Rendering.class.isAssignableFrom(type) ||             Model.class.isAssignableFrom(type) ||             Map.class.isAssignableFrom(type) ||             View.class.isAssignableFrom(type) ||             !BeanUtils.isSimpleProperty(type)); } 
 
ServerResponseResultHandler ServerResponseResultHandler只处理返回值为ServerResponse类型的Response,并使用内置的messageWriters和视图解析器来处理他们
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 @Override public  void  afterPropertiesSet ()  throws  Exception {    if  (CollectionUtils.isEmpty(this .messageWriters)) {         throw  new  IllegalArgumentException ("Property 'messageWriters' is required" );     } } @Override public  boolean  supports (HandlerResult result)  {    return  (result.getReturnValue() instanceof  ServerResponse); } @Override public  Mono<Void> handleResult (ServerWebExchange exchange, HandlerResult result)  {    ServerResponse  response  =  (ServerResponse) result.getReturnValue();     Assert.state(response != null , "No ServerResponse" );     return  response.writeTo(exchange, new  ServerResponse .Context() {         @Override          public  List<HttpMessageWriter<?>> messageWriters() {             return  messageWriters;         }         @Override          public  List<ViewResolver> viewResolvers ()  {             return  viewResolvers;         }     }); }