【问题标题】:Add custom endpoints to Spring Data REST repositories and display in Swagger将自定义端点添加到 Spring Data REST 存储库并在 Swagger 中显示
【发布时间】:2017-11-29 10:13:24
【问题描述】:

我正在使用 Spring Boot 1.5.3、Spring Data REST、Hibernate、Swagger。 Spring Data REST 很棒,但有时我需要向特定端点添加自定义操作。不幸的是 this question 没有帮助。

我的典型存储库是:

@Transactional
@PreAuthorize("isAuthenticated()")
public interface WorkSessionRepository extends PagingAndSortingRepository<WorkSession, Long> {}

假设我有我的自定义控制器:

@RepositoryRestController
@RequestMapping(path = "/api/v1/workSessions")
public class WorkSessionController {

    @Autowired
    private EntityLinks entityLinks;

    @Autowired
    private WorkSessionRepository workSessionRepository;

    @Autowired
    private UserRepository userRepository;

    @PreAuthorize("isAuthenticated()")
    @RequestMapping(method = RequestMethod.POST, path = "/start")
    public ResponseEntity<?> start(@RequestBody(required = true) CheckPoint checkPoint) {
        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
    ....
    ....
    Resource<WorkSession> resource = new Resource<>(workSession); 
    resource.add(entityLinks.linkFor(WorkSession.class).slash(workSession.getId()).withSelfRel());
    return ResponseEntity.ok(resource);

现在 Swagger2 显示两个不同的控制器:

我希望将我的方法添加到 WorkSessionEntity 中。

这是Swagger的配置:

@Configuration
@EnableSwagger2
@Import({ springfox.documentation.spring.data.rest.configuration.SpringDataRestConfiguration.class,
        springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration.class })
@ComponentScan(basePackageClasses = { BusletApplication.class })
public class SwaggerConfig {

    @Autowired
    private TypeResolver typeResolver;

    @Bean
    public Docket internalAngularApi() {
        return new Docket(DocumentationType.SPRING_WEB)// Enable swagger2
                .select().//
                apis(RequestHandlerSelectors.any())// what list in the doc
                .paths(paths()).build()// select which paths shows
                .pathMapping("/").// the api base path
                directModelSubstitute(LocalDate.class, String.class).// replace
                                                                        // specific
                                                                        // model
                genericModelSubstitutes(ResponseEntity.class)// generic
                                                                // replacement
                .alternateTypeRules(
                        newRule(typeResolver.resolve(DeferredResult.class, typeResolver.resolve(ResponseEntity.class, WildcardType.class)),
                                typeResolver.resolve(WildcardType.class)))
                .useDefaultResponseMessages(false).//
                enableUrlTemplating(false).apiInfo(apiInfo()).groupName("Internal API for Angular UI");//
    }

    // Here is an example where we select any api that matches one of these
    // paths
    private Predicate<String> paths() {
        return or(regex("/api/v1/.*"), regex("/error/.*"));
    }

    @Bean
    public UiConfiguration uiConfig() {
        return new UiConfiguration("validatorUrl", // url
                "none", // docExpansion => none | list
                "alpha", // apiSorter => alpha
                "schema", // defaultModelRendering => schema
                UiConfiguration.Constants.DEFAULT_SUBMIT_METHODS, //
                false, // enableJsonEditor
                true, // showRequestHeaders => true | false
                6000L); // requestTimeout => in milliseconds
    }

有没有办法以优雅的方式将自定义控制器与 Spring Data REST 创建的存储库集成?

【问题讨论】:

    标签: java spring swagger spring-data-rest


    【解决方案1】:

    在您的WorkSessionController 中使用@Api(tags= " WorkSession Entity")

    您可以在 swagger-annotations-1.5.10.jar 中找到 io.swagger.annotations.Api。

    【讨论】:

      猜你喜欢
      • 2016-03-06
      • 2017-08-15
      • 2018-03-17
      • 1970-01-01
      • 2014-06-21
      • 1970-01-01
      • 2018-10-06
      • 2017-09-19
      • 2016-01-21
      相关资源
      最近更新 更多