Java 使用Swagger将创建的日期时间添加到restapi
我有几个API,并使用Java 使用Swagger将创建的日期时间添加到restapi,java,spring-boot,swagger,springfox,Java,Spring Boot,Swagger,Springfox,我有几个API,并使用springfox-swagger编写API文档。 我需要将创建日期添加到相应的API中。如何使用swagger实现这一点。我不需要任何API版本控制 例: @ApiOperation(value=“创建新用户并返回创建的用户。”) @后期映射(/user) public ResponseEntity createUser(@RequestBody UserDto UserDto){ User=userService.create(userDto); 返回新的响应属性(Us
springfox-swagger
编写API文档。
我需要将创建日期添加到相应的API中。如何使用swagger
实现这一点。我不需要任何API版本控制
例:
@ApiOperation(value=“创建新用户并返回创建的用户。”)
@后期映射(/user)
public ResponseEntity createUser(@RequestBody UserDto UserDto){
User=userService.create(userDto);
返回新的响应属性(UserMappers.USER\u ENTITY\u TO\u DTO.apply(USER),HttpStatus.CREATED);
}
在上面的示例中,我想添加
/user
的创建日期,以便跟踪创建日期。在我的项目中,我有类似的要求。作为解决方案,我创建了一个自定义注释(用于标记端点)并编写了一个插件(用于更新API描述)
选项#1
注释:@ApiSince
@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface ApiSince { String value() default ""; }
插件:ApiSincePlugin
@Component public class ApiSincePlugin implements OperationBuilderPlugin { private final DescriptionResolver resolver; @Autowired public ApiSincePlugin(DescriptionResolver resolver) { this.resolver = resolver; } @Override public void apply(OperationContext context) { final String sinceTemplate = "### Since %s%n%n%s"; String notes = ""; Optional<ApiOperation> apiOperationOptional = context.findAnnotation(ApiOperation.class); if (apiOperationOptional.isPresent()) { notes = apiOperationOptional.get().notes(); } String finalNotes = notes; Optional<ApiSince> apiSinceOptional = context.findAnnotation(ApiSince.class); if (apiSinceOptional.isPresent()) { finalNotes = String.format(sinceTemplate, apiSinceOptional.get().value(), notes); } context.operationBuilder().notes(resolver.resolve(finalNotes)); } @Override public boolean supports(DocumentationType type) { return true; } }
@Component public class ApiSincePlugin implements OperationBuilderPlugin { @Override public void apply(OperationContext context) { Optional<ApiSince> annotation = context.findAnnotation(ApiSince.class); if (annotation.isPresent()) { String value = annotation.get().value(); ObjectVendorExtension extention = new ObjectVendorExtension("x-since"); extention.addProperty(new StringVendorExtension("value", value)); context.operationBuilder().extensions(Collections.singletonList(extention)); } } @Override public boolean supports(DocumentationType documentationType) { return true; } }
如果您不想将其添加到描述中,而是作为一个额外的JSON属性,请查看此解决方案: 选项2
注释(代码同上)@ApiSince
插件:ApiSincePlugin
@Component public class ApiSincePlugin implements OperationBuilderPlugin { private final DescriptionResolver resolver; @Autowired public ApiSincePlugin(DescriptionResolver resolver) { this.resolver = resolver; } @Override public void apply(OperationContext context) { final String sinceTemplate = "### Since %s%n%n%s"; String notes = ""; Optional<ApiOperation> apiOperationOptional = context.findAnnotation(ApiOperation.class); if (apiOperationOptional.isPresent()) { notes = apiOperationOptional.get().notes(); } String finalNotes = notes; Optional<ApiSince> apiSinceOptional = context.findAnnotation(ApiSince.class); if (apiSinceOptional.isPresent()) { finalNotes = String.format(sinceTemplate, apiSinceOptional.get().value(), notes); } context.operationBuilder().notes(resolver.resolve(finalNotes)); } @Override public boolean supports(DocumentationType type) { return true; } }
@Component public class ApiSincePlugin implements OperationBuilderPlugin { @Override public void apply(OperationContext context) { Optional<ApiSince> annotation = context.findAnnotation(ApiSince.class); if (annotation.isPresent()) { String value = annotation.get().value(); ObjectVendorExtension extention = new ObjectVendorExtension("x-since"); extention.addProperty(new StringVendorExtension("value", value)); context.operationBuilder().extensions(Collections.singletonList(extention)); } } @Override public boolean supports(DocumentationType documentationType) { return true; } }
起作用(代码同上):@ApiSince
@Bean
UiConfiguration uiConfig() {
return UiConfigurationBuilder
.builder()
.showExtensions(true)
...
.build();
}