swagger 上传文件 参数_【引】Swagger2 关于JSONObject参数在API文档中展示详细参数以及参数说明...

引言代码实现自定义注解类 ApiJsonObject2package com.mybatis.plus.swagger;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.a...
摘要由CSDN通过智能技术生成

引言

代码实现

自定义注解类 ApiJsonObject2package com.mybatis.plus.swagger;

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

/**

* @Author wulongbo

* @Date 2020/9/14 17:20

* @Version 1.0

*/

@Target({ElementType.PARAMETER, ElementType.FIELD, ElementType.METHOD})

@Retention(RetentionPolicy.RUNTIME)

public @interface ApiJsonObject2 {

ApiJsonProperty2[] value(); //对象属性值

ApiJsonResult result() default @ApiJsonResult({});

String name() default "";

}

自定义注解类ApiJsonProperty2package com.mybatis.plus.swagger;

import io.swagger.annotations.Example;

import io.swagger.annotations.ExampleProperty;

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

/**

* @Author wulongbo

* @Date 2020/9/14 17:23

* @Version 1.0

*/

@Target(ElementType.ANNOTATION_TYPE)

@Retention(RetentionPolicy.RUNTIME)

public @interface ApiJsonProperty2 {

String name();

String defaultValue() default "";

String description() default "";

String allowableValues() default "";

boolean required() default false;

String access() default "";

boolean allowMultiple() default false;

Class> type() default String.class ;

String paramType() default "";

String example() default "";

Example examples() default @Example(value = @ExampleProperty(mediaType = "", value = ""));

String format() default "";

boolean readOnly() default false;

String collectionFormat() default "";

}

自定义注解类 ApiJsonResultpackage com.mybatis.plus.swagger;

/**

* Created by yueh on 2018/9/7.

*/

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

@Target(ElementType.ANNOTATION_TYPE)

@Retention(RetentionPolicy.RUNTIME)

public @interface ApiJsonResult {

String[] value();

String name() default "";

String type() default CommonData.RESULT_TYPE_NORMAL_FINAL;

}

ApiListingJsonScannerpackage com.mybatis.plus.swagger;

/**

* Created by yueh on 2018/9/12. */

import com.google.common.annotations.VisibleForTesting;

import com.google.common.base.Optional;

import com.google.common.base.*;

import com.google.common.collect.FluentIterable;

import com.google.common.collect.Iterables;

import com.google.common.collect.LinkedListMultimap;

import com.google.common.collect.Multimap;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.annotation.Primary;

import org.springframework.core.annotation.AnnotationUtils;

import org.springframework.stereotype.Component;

import org.springframework.web.bind.annotation.RequestMapping;

import springfox.documentation.PathProvider;

import springfox.documentation.builders.ApiListingBuilder;

import springfox.documentation.schema.Model;

import springfox.documentation.service.*;

import springfox.documentation.spi.service.contexts.ApiListingContext;

import springfox.documentation.spi.service.contexts.DocumentationContext;

import springfox.documentation.spi.service.contexts.RequestMappingContext;

import springfox.documentation.spring.web.paths.PathMappingAdjuster;

import springfox.documentation.spring.web.plugins.Docket;

import springfox.documentation.spring.web.plugins.DocumentationPluginsManager;

import springfox.documentation.spring.web.scanners.ApiDescriptionReader;

import springfox.documentation.spring.web.scanners.ApiListingScanner;

import springfox.documentation.spring.web.scanners.ApiListingScanningContext;

import springfox.documentation.spring.web.scanners.ApiModelReader;

import java.util.*;

import static com.google.common.base.Predicates.and;

import static com.google.common.collect.FluentIterable.from;

import static com.google.common.collect.Lists.newArrayList;

import static com.google.common.collect.Sets.newHashSet;

import static java.util.stream.Collectors.toList;

import static springfox.documentation.builders.BuilderDefaults.nullToEmptyList;

import static springfox.documentation.spi.service.contexts.Orderings.methodComparator;

import static springfox.documentation.spi.service.contexts.Orderings.resourceGroupComparator;

@Component

@Primary

public class ApiListingJsonScanner extends ApiListingScanner {

private final ApiDescriptionReader apiDescriptionReader;

private final ApiModelReader apiModelReader;

private final DocumentationPluginsManager pluginsManager;

public static final String ROOT = "/";

@Autowired

public ApiListingJsonScanner(

ApiDescriptionReader apiDescriptionReader,

ApiModelReader apiModelReader,

DocumentationPluginsManager pluginsManager) {

super(apiDescriptionReader,apiModelReader,pluginsManager);

this.apiDescriptionReader = apiDescriptionReader;

this.apiModelReader = apiModelReader;

this.pluginsManager = pluginsManager;

}

static Optional longestCommonPath(List apiDescriptions) {

List commons = newArrayList();

if (null == apiDescriptions || apiDescriptions.isEmpty()) {

return Optional.absent();

}

List firstWords = urlParts(apiDescriptions.get(0));

for (int position = 0; position < firstWords.size(); position++) {

String word = firstWords.get(position);

boolean allContain = true;

for (int i = 1; i < apiDescriptions.size(); i++) {

List words = urlParts(apiDescriptions.get(i));

if (words.size() < position + 1 || !words.get(position).equals(word)) {

allContain = false;

break; }

}

if (allContain) {

commons.add(word);

}

}

Joiner joiner = Joiner.on("/").skipNulls();

return Optional.of("/" + joiner.join(commons));

}

static List urlParts(ApiDescription apiDescription) {

return Splitter.on('/')

.omitEmptyStrings()

.trimResults()

.splitToList(apiDescription.getPath());

}

public Multimap scan(ApiListingScanningContext context) {

final Multimap apiListingMap = LinkedListMultimap.create();

int position = 0;

Map> requestMappingsByResourceGroup

= context.getRequestMappingsByResourceGroup();

Collection additionalListings = pluginsManager.additionalListings(context);

Set allResourceGroups = FluentIterable.from(collectResourceGroups(additionalListings))

.append(requestMappingsByResourceGroup.keySet())

.toSet();

List securityReferences = newArrayList();

for (final ResourceGroup resourceGroup : sortedByName(allResourceGroups)) {

DocumentationContext documentationContext = context.getDocumentationContext();

Set produces = new LinkedHashSet(documentationContext.getProduces());

Set consumes = new LinkedHashSet(documentationContext.getConsumes());

String host = documentationContext.getHost();

Set protocols = new LinkedHashSet(documentationContext.getProtocols());

Set apiDescriptions = newHashSet();

Map models = new LinkedHashMap();

List requestMappings = nullToEmptyList(requestMappingsByResourceGroup.get(resourceGroup));

for (RequestMappingContext each : sortedByMethods(requestMappings)) {//url

Map knownModels = new HashMap<>();

models.putAll(apiModelReader.read(each.withKnownModels(models)));

apiDescriptions.addAll(apiDescriptionReader.read(each));

}

//

models.putAll(ModelCache.getInstance().getKnownModels());

List additional = from(addi

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值