gpt4 book ai didi

java - 将自定义端点添加到 Spring Data REST 存储库并在 Swagger 中显示

转载 作者:行者123 更新时间:2023-11-30 06:38:47 24 4
gpt4 key购买 nike

我正在使用 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> {}

假设我有自定义 Controller :

@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 显示两个不同的 Controller :

swagger view

我希望将我的方法添加到 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
}

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

最佳答案

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

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

关于java - 将自定义端点添加到 Spring Data REST 存储库并在 Swagger 中显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44761960/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com