Skip to content

Spring boot async Callable support #297

Closed
@darc1

Description

@darc1

Hi,

Springdoc fails to generate the response schema for spring boot controller methods with Callable. (spring boot async support using Callable docs)

For example the controller method:

    @RequestMapping(value = "/tasks", method = RequestMethod.GET)
    private Callable<ResponseEntity<Page<TaskDTO>>> getTasks(
                                                             @RequestParam(required = false) Predicate predicate,
                                                             Pageable pageable) {

        return () -> {

            Page<TaskDTO> fetchResult = fetchService.getTasks(pageable, predicate);
            return new ResponseEntity<>(fetchResult);

        };
    }

I was able to work around it by overriding the calculateSchemaFromParameterizedType method in the ResponseBuilder class, like this:

@ComponentScan(basePackages = {"org.springdoc.core"})
@Configuration
public class SpringDocConfig {

    private final OperationBuilder builder;

    public SpringDocConfig(OperationBuilder builder) {
        this.builder = builder;
    }

    @Bean
    public ResponseBuilder responseBuilder(){
        return new ResponseBuilderWithCallableHandling(builder);
    }


    public class ResponseBuilderWithCallableHandling extends ResponseBuilder{

        ResponseBuilderWithCallableHandling(OperationBuilder operationBuilder) {
            super(operationBuilder);
        }

        @Override
        protected Schema calculateSchemaFromParameterizedType(Components components, ParameterizedType parameterizedType, JsonView jsonView) {
            Schema<?> schemaN = null;

            if (Callable.class.getName().contentEquals(parameterizedType.getRawType().getTypeName())) {
                Type type = parameterizedType.getActualTypeArguments()[0];
                if(type instanceof ParameterizedType){
                    schemaN = super.calculateSchemaFromParameterizedType(components, (ParameterizedType)type, jsonView);
                }else {
                    schemaN = this.calculateSchemaParameterizedType(components, parameterizedType, jsonView);
                }
            }else {
                schemaN = super.calculateSchemaFromParameterizedType(components, parameterizedType, jsonView);
            }

            return schemaN;
        }
    }
}

It would be great if you could add support for Callable in future releases.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions