@Override
 public boolean supportsReturnType(MethodParameter returnType) {
   if (ResponseBodyEmitter.class.isAssignableFrom(returnType.getParameterType())) {
     return true;
   } else if (ResponseEntity.class.isAssignableFrom(returnType.getParameterType())) {
     Class<?> bodyType = ResolvableType.forMethodParameter(returnType).getGeneric(0).resolve();
     return (bodyType != null && ResponseBodyEmitter.class.isAssignableFrom(bodyType));
   }
   return false;
 }
コード例 #2
0
  @Override
  public Mono<Object> resolveArgument(
      MethodParameter param, BindingContext bindingContext, ServerWebExchange exchange) {

    ResolvableType entityType = ResolvableType.forMethodParameter(param);
    MethodParameter bodyParameter = new MethodParameter(param);
    bodyParameter.increaseNestingLevel();

    return readBody(bodyParameter, false, bindingContext, exchange)
        .map(body -> createHttpEntity(body, entityType, exchange))
        .defaultIfEmpty(createHttpEntity(null, entityType, exchange));
  }
コード例 #3
0
 private List<ResolvableType> resolveDeclaredEventTypes() {
   int count = this.method.getParameterCount();
   if (count > 1) {
     throw new IllegalStateException(
         "Maximum one parameter is allowed for event listener method: " + this.method);
   }
   EventListener ann = getEventListener();
   if (ann != null && ann.classes().length > 0) {
     List<ResolvableType> types = new ArrayList<>();
     for (Class<?> eventType : ann.classes()) {
       types.add(ResolvableType.forClass(eventType));
     }
     return types;
   } else {
     if (count == 0) {
       throw new IllegalStateException(
           "Event parameter is mandatory for event listener method: " + this.method);
     }
     return Collections.singletonList(ResolvableType.forMethodParameter(this.method, 0));
   }
 }