精华内容
下载资源
问答
  • configure 配置参数说明

    千次阅读 2018-09-19 10:58:34
    configure 配置参数说明1 说明2 开发环境3 configure参数说明3.1 查看configure 配置选项3.2 参数说明3.2.1 build 参数3.2.2 host 参数3.2.3 target 参数3.2.4 CC 编译器参数3.3 编译参数示例 1 说明 在linux 中,...

    1 说明

    在linux 中,经常需要用到交叉编译,在ubuntu系统中,交叉编译可以运行在arm平台上的bin文件。对于大部分代码,
    都有configure文件,让开发者进行配置,配置完毕之后自动生成makefile,然后进行编译。本文旨在说明configure中
    常用的一些参数。
    

    2 开发环境

    软件环境: ubuntu 操作系统
    编译工具链:arm-xilinx-linux-gnueabi
    硬件平台:zynq7010
    

    3 configure参数说明

    3.1 查看configure 配置选项

    在configure目录下,运行 --help命令,可以查看到configure的配置参数一共有哪些。
    

    ./configure --help

    Defaults for the options are specified in brackets.
    
    Configuration:
      -h, --help              display this help and exit
          --help=short        display options specific to this package
          --help=recursive    display the short help of all the included packages
      -V, --version           display version information and exit
      -q, --quiet, --silent   do not print `checking ...' messages
          --cache-file=FILE   cache test results in FILE [disabled]
      -C, --config-cache      alias for `--cache-file=config.cache'
      -n, --no-create         do not create output files
          --srcdir=DIR        find the sources in DIR [configure dir or `..']
    
    Installation directories:
      --prefix=PREFIX         install architecture-independent files in PREFIX
                              [/usr/local]
      --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
                              [PREFIX]
    
    By default, `make install' will install all the files in
    `/usr/local/bin', `/usr/local/lib' etc.  You can specify
    an installation prefix other than `/usr/local' using `--prefix',
    for instance `--prefix=$HOME'.
    
    For better control, use the options below.
    
    Fine tuning of the installation directories:
      --bindir=DIR            user executables [EPREFIX/bin]
      --sbindir=DIR           system admin executables [EPREFIX/sbin]
      --libexecdir=DIR        program executables [EPREFIX/libexec]
      --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
      --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
      --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
      --runstatedir=DIR       modifiable per-process data [LOCALSTATEDIR/run]
      --libdir=DIR            object code libraries [EPREFIX/lib]
      --includedir=DIR        C header files [PREFIX/include]
      --oldincludedir=DIR     C header files for non-gcc [/usr/include]
      --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
      --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
      --infodir=DIR           info documentation [DATAROOTDIR/info]
      --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
      --mandir=DIR            man documentation [DATAROOTDIR/man]
      --docdir=DIR            documentation root [DATAROOTDIR/doc/cgminer]
      --htmldir=DIR           html documentation [DOCDIR]
      --dvidir=DIR            dvi documentation [DOCDIR]
      --pdfdir=DIR            pdf documentation [DOCDIR]
      --psdir=DIR             ps documentation [DOCDIR]
    
    Program names:
      --program-prefix=PREFIX            prepend PREFIX to installed program names
      --program-suffix=SUFFIX            append SUFFIX to installed program names
      --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
    
    System types:
      --build=BUILD     configure for building on BUILD [guessed]
      --host=HOST       cross-compile to build programs to run on HOST [BUILD]
      --target=TARGET   configure for building compilers for TARGET [HOST]
      
    Some influential environment variables:
      CC          C compiler command
      CFLAGS      C compiler flags
      LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
                  nonstandard directory <lib dir>
      LIBS        libraries to pass to the linker, e.g. -l<library>
      CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
                  you have headers in a nonstandard directory <include dir>
      CPP         C preprocessor
      PKG_CONFIG  path to pkg-config utility
      PKG_CONFIG_PATH
                  directories to add to pkg-config's search path
      PKG_CONFIG_LIBDIR
                  path overriding pkg-config's built-in search path
      LIBUSB_CFLAGS
                  C compiler flags for LIBUSB, overriding pkg-config
      LIBUSB_LIBS linker flags for LIBUSB, overriding pkg-config
      JANSSON_CFLAGS
                  C compiler flags for JANSSON, overriding pkg-config
      JANSSON_LIBS
                  linker flags for JANSSON, overriding pkg-config
      LIBCURL_CFLAGS
                  C compiler flags for LIBCURL, overriding pkg-config
      LIBCURL_LIBS
                  linker flags for LIBCURL, overriding pkg-config
      LIBSYSTEMD_CFLAGS
                  C compiler flags for LIBSYSTEMD, overriding pkg-config
      LIBSYSTEMD_LIBS
                  linker flags for LIBSYSTEMD, overriding pkg-config
    
    Use these variables to override the choices made by `configure' or to help
    it to find libraries and programs with nonstandard names/locations.
    

    3.2 参数说明

    3.2.1 build 参数

     --build=BUILD     configure for building on BUILD [guessed]
    

    build: 执行代码编译的主机,正常的话就是你的主机系统。这个参数一般由config.guess来猜就可以。当然自己指定也可以。可以默认不写,默认为当前正在使用的ubuntu主机,如 i386-linux

     --build=i386-linux
     或者xilinx-arm的编译器主机
     --build=i686-pc-linux-gnu
     或者不写
    

    3.2.2 host 参数

     --host=HOST       cross-compile to build programs to run on HOST [BUILD]
    

    指定软件运行的系统平台.如果没有指定,将会运行`config.guess’来检测.–host 指定的是交叉编译工具链的前缀。如本位中采用的是arm-xilinx-linux-gnueabi 工具链,则参数配置为:

    --host=arm-xilinx-linux-gnueabi
    

    3.2.3 target 参数

      --target=TARGET   configure for building compilers for TARGET [HOST]
    

    target: 这个选项只有在建立交叉编译环境的时候用到,正常编译和交叉编译都不会用到。他用build主机上的编译器,编译一个新的编译器(binutils, gcc,gdb等),这个新的编译器将来编译出来的其他程序将运行在target指定的系统上。
    如果不编译新的编译器,这个参数可以不填,或者与 host的参数一致

    --target=arm-xilinx-linux-gnueabi
    或者不写 --target的参数
    

    3.2.4 CC 编译器参数

    CC          C compiler command
    

    指定GCC 交叉编译器命令,如果配置了,则使用CC配置的编译器,如果不配置则默认为host对应的GCC工具
    如配置了 --host=arm-xilinx-linux-gnueabi,则默认CC的编译器为 arm-xilinx-linux-gnueabi-gcc
    这个参数如无特殊指定,可以忽略不写。

    3.2.5 prefix 安装参数
    该参数指定编译后,文件安装的目录。

     --program-prefix=PREFIX            prepend PREFIX to installed program names
    

    不指定prefix,则可执行文件默认放在/usr/local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc。其他的资源文件放在/usr/local/share。你要卸载这个程序,要么在原来make目录下用make uninstall(前提是make文件指定过make uninstall),要么去上述文件中一个一个手动删除。如需指定make install 的目录,如 /home/tmp/test

    --prefix=/home/tmp/test
    

    3.3 编译参数示例

    如编译 zynq平台下的程序,则配置如下即可

    ./configure  --host=arm-xilinx-linux-gnueabi --build=i686-pc-linux-gnu --target=arm-xilinx-linux-gnueabi CC=arm-xilinx-linux-gnueabi-gcc
    或者
    ./configure --host=arm-xilinx-linux-gnueabi  --build=i386-linux
    或者
    ./configure  --host=arm-xilinx-linux-gnueabi 
    
    展开全文
  • pagehelper使用方法及参数说明

    千次阅读 2020-07-28 15:49:12
    pagehelper使用方法及参数说明 使用方法: @Override public PageInfo<Person> getByPage(int currentPage, int pageSize, Map<String,Object> map) { PageHelper.startPage(currentPage,pageSize...

    pagehelper使用方法及参数说明

    使用方法:

    复制代码

    @Override
    public PageInfo<Person> getByPage(int currentPage, int pageSize, Map<String,Object> map) {
            PageHelper.startPage(currentPage,pageSize,true);
            List<Person> list = personMapper.getListByParamMap(map);
            PageInfo<Person> pageInfo = new PageInfo<>(list);
            return pageInfo;
        }

    复制代码

    参数说明:
    其中PageHelper.startPage(currentPage,pageSize,true);第一个参数表示从第几页开始,第二个参数表示一页多少条记录,第三个参数表示是否返回总的真实记录数
    注意:PageHelper.startPage(currentPage,pageSize,true);要紧接着查询,否则可能不分页
    返回如下:
    

    复制代码

    {
        "endRow": 2,
        "hasNextPage": false,
        "hasPreviousPage": false,
        "isFirstPage": true,
        "isLastPage": true,
        "list": [{
            "createdBy": "SYSTEM",
            "createdDate": 1575545371000,
            "password": "123",
            "updatedBy": "SYSTEM",
            "updatedDate": 1575545371000,
            "userId": 1,
            "userName": "wcc"
        }, {
            "createdBy": "SYSTEM",
            "createdDate": 1575545631000,
            "password": "123",
            "updatedBy": "SYSTEM",
            "updatedDate": 1575545631000,
            "userId": 2,
            "userName": "魏灿灿"
        }],
        "navigateFirstPage": 1,
        "navigateLastPage": 1,
        "navigatePages": 8,
        "navigatepageNums": [1],
        "nextPage": 0,
        "pageNum": 1,
        "pageSize": 1000,
        "pages": 1,
        "prePage": 0,
        "size": 2,
        "startRow": 1,
        "total": 2
    }

    复制代码

     

     
    另附上PageInfo参数说明:
    

    复制代码

    //当前页
        private int pageNum;
        //每页的数量
        private int pageSize;
        //当前页的数量
        private int size;
     
        //由于startRow和endRow不常用,这里说个具体的用法
        //可以在页面中"显示startRow到endRow 共size条数据"
     
        //当前页面第一个元素在数据库中的行号
        private int startRow;
        //当前页面最后一个元素在数据库中的行号
        private int endRow;
        //总记录数
        private long total;
        //总页数
        private int pages;
        //结果集
        private List<T> list;
     
        //前一页
        private int prePage;
        //下一页
        private int nextPage;
     
        //是否为第一页
        private boolean isFirstPage = false;
        //是否为最后一页
        private boolean isLastPage = false;
        //是否有前一页
        private boolean hasPreviousPage = false;
        //是否有下一页
        private boolean hasNextPage = false;
        //导航页码数
        private int navigatePages;
        //所有导航页号
        private int[] navigatepageNums;
        //导航条上的第一页
        private int navigateFirstPage;
        //导航条上的最后一页
        private int navigateLastPage;
    展开全文
  • Solr查询参数说明

    万次阅读 2017-07-25 21:40:02
    Solr查询参数说明: http://localhost:8983/solr/solr_select/query?q=*:*&fl=id 参数说明如下: q – 查询字符串,必须的。Solr 中用来搜索的查询。有关该语法的完整描述,请参阅 参考资料 中


    原文转至:http://blog.csdn.net/yuwenruli/article/details/8448575


    Solr查询参数说明:
    http://localhost:8983/solr/solr_select/query?q=*:*&fl=id




    参数说明如下:
    q – 查询字符串,必须的。Solr 中用来搜索的查询。有关该语法的完整描述,请参阅 参考资料 中的 “Lucene QueryParser Syntax”。可以通过追加一个分号和已索引且未进行断词的字段的名称来包含排序信息。默认的排序是 score
    desc,指按记分降序排序。           q=myField:Java AND otherField:developerWorks; date asc此查询搜索指定的两个字段并根据一个日期字段对结果进行排序。
    start – 返回第一条记录在完整找到结果中的偏移位置,0开始,一般分页用。
    rows – 指定返回结果最多有多少条记录,配合start来实现分页。
    sort – 排序,格式:sort=<field name>+<desc|asc>[,<field name>+<desc|asc>]… 。示例:(inStock desc, price asc)表示先 “inStock” 降序, 再 “price” 升序,默认是相关性降序。
    wt – (writer type)指定输出格式,可以有 xml, json, php, phps, 后面 solr 1.3增加的,要用通知我们,因为默认没有打开。
    fq – (filter query)过虑查询,作用:在q查询符合结果中同时是fq查询符合的,
    fl- field作为逗号分隔的列表指定文档结果中应返回的 Field 集。默认为 “*”,指所有的字段。“score” 指还应返回记分。例如 *,score
    将返回所有字段及得分。用solrj的bean时,得在query中指定 query.set("fl", "*,score");
    q.op – 覆盖schema.xml的defaultOperator(有空格时用"AND"还是用"OR"操作逻辑),一般默认指定
    df – 默认的查询字段,一般默认指定
    qt – (query type)指定那个类型来处理查询请求,一般不用指定,默认是standard。
    indent – 返回的结果是否缩进,默认关闭,用 indent=true|on 开启,一般调试json,php,phps,ruby输出才有必要用这个参数。
    version – 查询语法的版本,建议不使用它,由服务器指定默认值。




    hight:
    hl-highlight,h1=true,表示采用高亮。可以用h1.fl=field1,field2 来设定高亮显示的字段。
    hl.fl: 用空格或逗号隔开的字段列表。要启用某个字段的highlight功能,就得保证该字段在schema中是stored。如果该参数未被给出,那么就会高 亮默认字段 standard handler会用df参数,dismax字段用qf参数。你可以使用星号去方便的高亮所有字段。如果你使用了通配符,那么要考虑启用 hl.requiredFieldMatch选项。
    hl.requireFieldMatch:
    如果置为true,除非该字段的查询结果不为空才会被高亮。它的默认值是false,意味 着它可能匹配某个字段却高亮一个不同的字段。如果hl.fl使用了通配符,那么就要启用该参数。尽管如此,如果你的查询是all字段(可能是使用 copy-field 指令),那么还是把它设为false,这样搜索结果能表明哪个字段的查询文本未被找到
    hl.usePhraseHighlighter:
    如果一个查询中含有短语(引号框起来的)那么会保证一定要完全匹配短语的才会被高亮。
    hl.highlightMultiTerm
    如果使用通配符和模糊搜索,那么会确保与通配符匹配的term会高亮。默认为false,同时hl.usePhraseHighlighter要为true。
    hl.snippets:
    这是highlighted片段的最大数。默认值为1,也几乎不会修改。如果某个特定的字段的该值被置为0(如f.allText.hl.snippets=0),这就表明该字段被禁用高亮了。你可能在hl.fl=*时会这么用。
    hl.fragsize:
    每个snippet返回的最大字符数。默认是100.如果为0,那么该字段不会被fragmented且整个字段的值会被返回。大字段时不会这么做。
    hl.mergeContiguous:
    如果被置为true,当snippet重叠时会merge起来。
    hl.maxAnalyzedChars:
    会搜索高亮的最大字符,默认值为51200,如果你想禁用,设为-1
    hl.alternateField:
    如果没有生成snippet(没有terms 匹配),那么使用另一个字段值作为返回。
    hl.maxAlternateFieldLength:
    如果hl.alternateField启用,则有时需要制定alternateField的最大字符长度,默认0是即没有限制。所以合理的值是应该为
    hl.snippets * hl.fragsize这样返回结果的大小就能保持一致。
    hl.formatter:一个提供可替换的formatting算法的扩展点。默认值是simple,这是目前仅有的选项。显然这不够用,你可以看看org.apache.solr.highlight.HtmlFormatter.java 和 solrconfig.xml中highlighting元素是如何配置的。
    注意在不论原文中被高亮了什么值的情况下,如预先已存在的em tags,也不会被转义,所以在有时会导致假的高亮。
    hl.fragmenter:
    这个是solr制 定fragment算法的扩展点。gap是默认值。regex是另一种选项,这种选项指明highlight的边界由一个正则表达式确定。这是一种非典型 的高级选项。为了知道默认设置和fragmenters (and formatters)是如何配置的,可以看看solrconfig.xml中的highlight段。
    regex 的fragmenter有如下选项:
    hl.regex.pattern:正则表达式的pattern
    hl.regex.slop:这是hl.fragsize能变化以适应正则表达式的因子。默认值是0.6,意思是如果hl.fragsize=100那么fragment的大小会从40-160.
    这些值都可以在select中加入,也可以用solrj的api去设定,也可以配置在solrconfig.xml中配置。
    示例如下:
    <requestHandler name="search" class="solr.SearchHandler" default="true">
        <!– default values for query parameters can be specified, these
             will be overridden by parameters in the request
          –>
         <lst name="defaults">
           <str name="echoParams">explicit</str>
           <int name="rows">10</int>
           <bool name="hl">true</bool> 
           <str name="hl.fl">title,content</str>  
           <str name="f.content.hl.fragsize">200</str>
           <str name="mlt.qf">
             id^10.0 title^10.0 content^1.0
           </str>
         </lst>
    </requestHandler>



    展开全文
  • 看到这篇文章有感,这是Swagger2 关于Map参数在API文档中展示详细参数以及参数说明 所以本篇文章主要是写JSONObject的,主要靠自定义注释类实现 关键点:不生成Model.class,而是靠传值给swagger。 并且该改动不...

    说明

    https://blog.csdn.net/hellopeng1/article/details/82227942
    看到这篇文章有感,这是Swagger2 关于Map参数在API文档中展示详细参数以及参数说明
    所以本篇文章主要是写JSONObject的,主要靠自定义注释类实现
    关键点:不生成Model.class,而是靠传值给swagger。

    并且该改动不影响swagger原来的使用,Object/JsonObject 都可以兼容
    申明:只是对swagger无法手动的补充

    Controller

    image.png

    Model

    image.png

    最终结果

    request:
    image.png
    request model:
    image.png

    response:
    image.png
    response model:
    image.png

    代码实现

    首先根据官方文档,写一个OperationBuilderPlugin类型的插件,这个插件用来读取接口的参数

    @Component
    @Order(Ordered.HIGHEST_PRECEDENCE)
    public class ParametersReader implements OperationBuilderPlugin {
    ...
     @Override
     public void apply(OperationContext context) {
            context.operationBuilder().parameters(readParameters(context));
     }
     private List<Parameter> readParameters(OperationContext context) {
            List<Parameter> parameters = Lists.newArrayList();
            List<ResolvedMethodParameter> methodParameters = context.getParameters();
    
            //1. 先读取GlobalString类中我们定义的参数单元,用一个Map来保存
            Map<String, ApiSingleParam> paramMap = new HashMap<>();
            Field[] fields = GlobalString.class.getDeclaredFields();
            String type = new String();
            for (Field field : fields) {
                if (field.isAnnotationPresent(ApiSingleParam.class)) {
                    ApiSingleParam param = field.getAnnotation(ApiSingleParam.class);
                    try {
                        String name = (String) field.get(type);
                        paramMap.put(name, param);
                    } catch (Exception e) {
                    }
                }
            }
    
            //遍历controller中的方法
            for (ResolvedMethodParameter methodParameter : methodParameters) {
                ParameterContext parameterContext = new ParameterContext(methodParameter,
                        new ParameterBuilder(),
                        context.getDocumentationContext(),
                        context.getGenericsNamingStrategy(),
                        context);
                Function<ResolvedType, ? extends ModelReference> factory = createModelRefFactory(parameterContext);
    
                //读取自定义的注释类
                Optional<ApiJsonObject> annotation = context.findAnnotation(ApiJsonObject.class);
    
                if (annotation.isPresent()) {
                    //2. 自定义的注释类里包含参数列表,我们把它合成一个请求Model和应答Model,放在ModelCache缓存里面
                    ModelCache.getInstance().setFactory(factory)
                            .setParamMap(paramMap)
                            .addModel(annotation.get());
                }
            }
            return parameters;
        }
    }
    

    然后重写 ApiListingScanner 类,将我们的Model加入到swagger的Model列表中

    @Component
    @Primary
    public class ApiListingPluginsScanner extends ApiListingScanner {
    ...
        public Multimap<String, ApiListing> scan(ApiListingScanningContext context) {
             final Multimap<String, ApiListing> apiListingMap = LinkedListMultimap.create();
            int position = 0;
            Map<ResourceGroup, List<RequestMappingContext>> requestMappingsByResourceGroup
                    = context.getRequestMappingsByResourceGroup();
            Collection<ApiDescription> additionalListings = pluginsManager.additionalListings(context);
            Set<ResourceGroup> allResourceGroups = FluentIterable.from(collectResourceGroups(additionalListings))
                    .append(requestMappingsByResourceGroup.keySet())
                    .toSet();
    
            List<SecurityReference> securityReferences = newArrayList();
            for (final ResourceGroup resourceGroup : sortedByName(allResourceGroups)) {
    
                DocumentationContext documentationContext = context.getDocumentationContext();
                Set<String> produces = new LinkedHashSet<String>(documentationContext.getProduces());
                Set<String> consumes = new LinkedHashSet<String>(documentationContext.getConsumes());
                String host = documentationContext.getHost();
                Set<String> protocols = new LinkedHashSet<String>(documentationContext.getProtocols());
                Set<ApiDescription> apiDescriptions = newHashSet();
    
                Map<String, Model> models = new LinkedHashMap<String, Model>();
                List<RequestMappingContext> requestMappings = nullToEmptyList(requestMappingsByResourceGroup.get(resourceGroup));
    
                for (RequestMappingContext each : sortedByMethods(requestMappings)) {//url
                    Map<String, Model> knownModels = new HashMap<>();
                    models.putAll(apiModelReader.read(each.withKnownModels(models)));
                    apiDescriptions.addAll(apiDescriptionReader.read(each));
                }
                //加入自己的Model
                models.putAll(ModelCache.getInstance().getKnownModels());
    
                List<ApiDescription> additional = from(additionalListings)
                        .filter(and(
                                        belongsTo(resourceGroup.getGroupName()),
                                        onlySelectedApis(documentationContext)))
                        .toList();
                apiDescriptions.addAll(additional);
    
                List<ApiDescription> sortedApis = FluentIterable.from(apiDescriptions)
                        .toSortedList(documentationContext.getApiDescriptionOrdering());
                Optional<String> o = longestCommonPath(sortedApis);
                String resourcePath = new ResourcePathProvider(resourceGroup)
                        .resourcePath()
                        .or(o)
                        .orNull();
    
                PathProvider pathProvider = documentationContext.getPathProvider();
                String basePath = pathProvider.getApplicationBasePath();
                PathAdjuster adjuster = new PathMappingAdjuster(documentationContext);
                ApiListingBuilder apiListingBuilder = new ApiListingBuilder(context.apiDescriptionOrdering())
                        .apiVersion(documentationContext.getApiInfo().getVersion())
                        .basePath(adjuster.adjustedPath(basePath))
                        .resourcePath(resourcePath)
                        .produces(produces)
                        .consumes(consumes)
                        .host(host)
                        .protocols(protocols)
                        .securityReferences(securityReferences)
                        .apis(sortedApis)
                        .models(models)
                        .position(position++)
                        .availableTags(documentationContext.getTags());
    
                ApiListingContext apiListingContext = new ApiListingContext(
                        context.getDocumentationType(),
                        resourceGroup,
                        apiListingBuilder);
                apiListingMap.put(resourceGroup.getGroupName(), pluginsManager.apiListing(apiListingContext));
            }
            return apiListingMap;
        }
    }
    

    这样request的部分就完成了,下面是response的实现

    先重写 SwaggerResponseMessageReader 类

    @Primary
    @Component
    @Order(SwaggerPluginSupport.SWAGGER_PLUGIN_ORDER + 3)//一定要大一点
    public class ResponseMessageReader extends SwaggerResponseMessageReader {
        
        private final TypeNameExtractor typeNameExtractor;
        private final TypeResolver typeResolver;
    
        public ResponseMessageReader(TypeNameExtractor typeNameExtractor, TypeResolver typeResolver) {
            super(typeNameExtractor, typeResolver);
            this.typeNameExtractor = typeNameExtractor;
            this.typeResolver = typeResolver;
        }
    
        @Override
        protected Set<ResponseMessage> read(OperationContext context) {
            ResolvedType defaultResponse = context.getReturnType();
            Optional<ApiOperation> operationAnnotation = context.findAnnotation(ApiOperation.class);
            Optional<ResolvedType> operationResponse =
                    operationAnnotation.transform(resolvedTypeFromOperation(typeResolver, defaultResponse));
            Optional<ResponseHeader[]> defaultResponseHeaders = operationAnnotation.transform(responseHeaders());
            Map<String, Header> defaultHeaders = newHashMap();
            if (defaultResponseHeaders.isPresent()) {
                defaultHeaders.putAll(headers(defaultResponseHeaders.get()));
            }
    
            List<ApiResponses> allApiResponses = context.findAllAnnotations(ApiResponses.class);
            Set<ResponseMessage> responseMessages = newHashSet();
    
            Map<Integer, ApiResponse> seenResponsesByCode = newHashMap();
            for (ApiResponses apiResponses : allApiResponses) {
                ApiResponse[] apiResponseAnnotations = apiResponses.value();
                for (ApiResponse apiResponse : apiResponseAnnotations) {
    
                    if (!seenResponsesByCode.containsKey(apiResponse.code())) {
                        seenResponsesByCode.put(apiResponse.code(), apiResponse);
    
                        java.util.Optional<ModelReference> responseModel = java.util.Optional.empty();
                        java.util.Optional<ResolvedType> type = resolvedType(null, apiResponse);
                        if (isSuccessful(apiResponse.code())) {
                            type = java.util.Optional.ofNullable(type.orElseGet(operationResponse::get));
                        }
                        if (type.isPresent()) {
                            //将返回的模型ID修改成自定义的,这里我取@apiResponse中的reference参数加"-result"组合
                            responseModel = java.util.Optional.of(new ModelRef(apiResponse.reference()+"-result"));
                        }
                        Map<String, Header> headers = newHashMap(defaultHeaders);
                        headers.putAll(headers(apiResponse.responseHeaders()));
    
                        responseMessages.add(new ResponseMessageBuilder()
                                .code(apiResponse.code())
                                .message(apiResponse.message())
                                .responseModel(responseModel.orElse(null))
                                .headersWithDescription(headers)
                                .build());
                    }
                }
            }
            if (operationResponse.isPresent()) {
                ModelContext modelContext = returnValue(
                        context.getGroupName(),
                        operationResponse.get(),
                        context.getDocumentationType(),
                        context.getAlternateTypeProvider(),
                        context.getGenericsNamingStrategy(),
                        context.getIgnorableParameterTypes());
                ResolvedType resolvedType = context.alternateFor(operationResponse.get());
    
                ModelReference responseModel = modelRefFactory(modelContext, typeNameExtractor).apply(resolvedType);
                context.operationBuilder().responseModel(responseModel);
                ResponseMessage defaultMessage = new ResponseMessageBuilder()
                        .code(httpStatusCode(context))
                        .message(message(context))
                        .responseModel(responseModel)
                        .build();
                if (!responseMessages.contains(defaultMessage) && !"void".equals(responseModel.getType())) {
                    responseMessages.add(defaultMessage);
                }
            }
    
            return responseMessages;
        }
        ...
    }
    
    

    ModelCache生成Model

    
        public ModelCache addModel(ApiJsonObject jsonObj) {
            String modelName =jsonObj.name();
    
            knownModels.put(modelName,
                    new Model(modelName,
                            modelName,
                            new TypeResolver().resolve(String.class),
                            "xin.bee.model.entity.BusinessUser",
                            toPropertyMap(jsonObj.value()),
                            "POST参数",
                            "",
                            "",
                            newArrayList(), null, null
                    ));
            String resultName = jsonObj.name() + "-" + "result";
    
            knownModels.put(resultName,
                    new Model(resultName,
                            resultName,
                            new TypeResolver().resolve(String.class),
                            "xin.bee.model.entity.BusinessUser",
                            toResultMap(jsonObj.result(), resultName),
                            "返回模型",
                            "",
                            "",
                            newArrayList(), null, null
                    ));
            return ModelCacheSub.instance;
        }
    
    

    ModelProperty的制作

      ModelProperty mp = new ModelProperty(
                            jsonResult.name(),
                            type,
                            "",
                            0,
                            false,
                            false,
                            true,
                            false,
                            "",
                            null,
                            "",
                            null,
                            "",
                            null,
                            newArrayList()
                    );// new AllowableRangeValues("1", "2000"),//.allowableValues(new AllowableListValues(["ABC", "ONE", "TWO"], "string"))
                    mp.updateModelRef(getModelRef());
                    ResolvedType collectionElementType = collectionElementType(type);
                    try {
                        Field f = ModelProperty.class.getDeclaredField("modelRef");
                        f.setAccessible(true);
                        f.set(mp, new ModelRef("List",new ModelRef(subModelName)));
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
    

    这样就搞定了!!!

    jar:
    导入我的jar包,可以只用request,或者response,只是对swagger无法手动的补充

    build.gradle:

    allprojects {
        repositories {
            //maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
            maven{ url "https://oss.sonatype.org/content/groups/staging"}
            //mavenCentral()
        }
    }
    dependencies {
        compile  group: 'io.github.cyjishuang' ,name: 'swagger-mode', version: '1.0'
    }
    

    spring-context.xml 添加扫描

    	<context:component-scan base-package="io.github.cyjishuang"/>
    

    在创建文档的时候设置存放参数的类ModelCache.getInstance().setParamClass(XXX.class);

     public Docket createRestApi() {
            ModelCache.getInstance().setParamClass(GlobalString.class);
            return new Docket(DocumentationType.SWAGGER_2)...
    

    这样配置就完成了,后面只需要对Controller和参数的类添加说明即可,示例

    @RequestMapping(value = "/api/v1/manager")
    @RestController
    @Api(description = "管理员身份接口")
    public class ManagerController {
       @ApiOperation(value = "管理员-预判是否存在",notes ="预判管理员是否存在" )
        @ApiJsonObject(name = "manager-checkManager", value = {
                @ApiJsonProperty(name = JSON_USER_NAME),
                @ApiJsonProperty(name = JSON_USER_EMAIL)},
                result = @ApiJsonResult({}))
        @ApiImplicitParam(name = "params", required = true, dataType = "manager-checkManager")
        @ApiResponses({@ApiResponse(code = 200, message = "OK", reference = "manager-checkManager")})
    
        @RequestMapping(value = "/checkManager", method = RequestMethod.POST, consumes = MSG_FORMAT_JSON_UTF8, produces = MSG_FORMAT_JSON_UTF8)
        public String checkManager(@RequestBody String params) {
            return new ControllerCallBack()
                    .addCommonService(managerService::checkUser)
                    .build(params);
        }
    }
    
    public class GlobalString {
        @ApiSingleParam(value = "用户姓名", example = "test1")
        public static final String JSON_USER_NAME = "userName";
    
        @ApiSingleParam(value = "用户邮箱", example = "17721026877@qq.com")
        public static final String JSON_USER_EMAIL = "userEmail";
    
        @ApiSingleParam(value = "错误码", example = "0", type = Integer.class)
        public static final String JSON_ERROR_CODE = "errorCode";
    
        @ApiSingleParam(value = "错误信息", example = "OK")
        public static final String JSON_ERROR_MSG = "errorMsg";
    }
    

    git:https://github.com/cyjishuang/swagger-mode

    展开全文
  • HSSFClientAnchor 参数说明

    千次阅读 2019-07-17 13:29:07
    Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能。 HSSFClientAnchor用于创建一个新的端锚,并设置锚的左下和...来张图更容易说明:
  • qt connect参数说明

    千次阅读 2019-05-08 10:10:35
    它其实有第五个参数,只是一般使用默认值,在满足某些特殊需求的时候可能需要手动设置。 Qt::AutoConnection: 默认值,使用这个值则连接类型会在信号发送时决定。如果接收者和发送者在同一个线程,则自动使用Qt::...
  • python 随机森林参数说明

    千次阅读 2018-07-27 15:01:23
    写在前面的话:本人刚刚学sklearn,很多参数也不是很懂,英语...Sklearn.ensemble.RandomForstClassifier 参数说明 Sklearn.ensemble.RandomForstClassifier(n_estimators=10, criterion=’gini’, max_depth=No...
  • LogisticRegression - 参数说明

    万次阅读 多人点赞 2018-07-16 16:15:59
    参数说明如下: penalty:惩罚项,str类型,可选参数为l1和l2,默认为l2。用于指定惩罚项中使用的规范。newton-cg、sag和lbfgs求解算法只支持L2规范。L1G规范假设的是模型的参数满足拉普拉斯分布,L2假设的模型参数...
  • LengthFieldBasedFrameDecoder - 参数说明 @author 鲁伟林 网上诸多博客对于LengthFieldBasedFrameDecode解码器的使用,翻译和解释过于死板,难于理解,特别是其构造函数的6个参数的解释,过于字面化解释。该博客...
  • keras lstm关键参数说明

    千次阅读 2018-06-21 10:53:55
    keras对lstm的参数说明比较少,如果没有好好研究lstm,则有时会比较困惑,现将容易理解困惑的三个参数说明一下: Units:指的是 每一个lstm单元的hidden layer 的神经元数量(就是ng课程里面额a,也就是输入到softmax...
  • 随机森林参数说明

    千次阅读 2018-12-27 02:48:37
    1 框架参数: n_estimators : 指定随机森林中的分类器的个数,默认为10。一般来说n_estimators 太小容易欠拟合,太大计算量大,故需要参数调优选择一个适中的数值;  oob_score: 是否采用袋外误差来评估模型...
  • selenium Chrome配置参数说明大全

    千次阅读 2019-06-07 01:02:36
    https://zhuanlan.zhihu.com/p/60852696
  • model.fit() fit函数参数说明

    万次阅读 2019-03-14 16:35:54
    model.fit() fit函数参数说明 fit( x, y, batch_size=32, epochs=10, verbose=1, callbacks=None, validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None, initial_...
  • 文章目录函数添加参数说明函数添加参数类型说明查看说明文档 函数添加参数说明 定义完一个函数之后,直接在下一行连续输入三对引号(单引号/双引号)回车即可自动生成函数说明文档,然后自己补充/填写完成即可 ...
  • boost b2/bjam 参数说明

    千次阅读 2019-05-09 13:15:57
    b2/bjam 参数说明: b2 命令的功能强大,用起来也比较复杂,因此在使用之前,最好先查看一下该命令的帮助: b2.exe --help 以下是一些比较重要的参数说明: stage/install: stage 表示只生成库(dll 和 ...
  • Redis_exporter 对应的PromSql参数说明

    千次阅读 2020-04-19 11:57:16
    (1)表示redis的服务器是不是正常 redis_up (2)表示Redis连接数。 redis_connected_clients
  • class sklearn.neighbors.KNeighborsClassifier(n_neighbors=5, weights=’uniform’, algorithm=’auto’, leaf_size=30,p=2, metric=’minkowski’, metric_params=None, n_jobs=1, **kwargs) 参数说明: n_...
  • Nvidia-smi简介及常用指令及其参数说明

    万次阅读 多人点赞 2018-10-10 10:40:26
    【题目】Nvidia-smi简介及常用指令及其参数说明 目录 一、什么是Nvidia-smi 二、常用的Nvidia-smi指令 三、各种指令参数总结 一、什么是Nvidia-smi nvidia-smi是nvidia 的系统管理界面 ,其中smi是System ...
  • Jmeter 线程组测试参数说明

    千次阅读 2017-06-08 21:16:09
    线程组元素是任何测试计划的起点。所有的控制器和采样器必须在一个线程组下。其他元素,例如侦听器,可以直接放在测试计划中,在这种情况下,它们将适用于所有的线程组。顾名思义,线程组元素控制JMeter用于执行测试...
  • 联邦学习框架FATE介绍(训练/测试步骤及参数说明)一、FATE概念1. 角色二、训练1. 准备2. 定义上传数据配置文件(1)参数说明:(2)示例3. 定义DSL 配置文件(1)概念(2)参数说明(3)示例4.定义运行配置文件(1...
  • layer.msg参数含义及参数icon数字参数说明

    万次阅读 多人点赞 2019-04-30 16:19:47
    layer.msg('正在提交请稍候。...参数icon数字参数说明 如 layer.msg('请选择要编辑的机构', {icon: 0}); 运行结果如图: icon参数为1,如下图 icon参数为2,如下图: icon参数为3,如下图: ico...
  • you-get 参数说明

    千次阅读 2019-04-11 11:35:46
    pip install you-get 1下载所有的视频 ...you-get: Extracting 1 of 12 videos ... ... 3.0% ( 10.8/364.4MB) ├██─────────────────────...参数说明 -i 打印初format --dbueg 加调试
  • DataX3.0 启动参数说明及优化

    千次阅读 2019-05-22 09:06:51
    查看各个启动参数 python datax.py -h jvm参数设置,不可设置太大,不然直接Exception python datax.py --jvm="-Xms1G -Xmx1G" test.json 配置动态参数,注意参数名以大写字母D开头 python datax.py -p ...
  • KNeighborsClassifier(一):参数说明

    千次阅读 2019-03-25 18:23:24
    KNeighborsClassifier又称K最近邻,...sklearn库中的该分类器有以下参数: from sklearn.neighbors import KNeighborsClassifier; model = KNeighborsClassifier( n_neighbors=5, weights=’uniform’, alg...
  • 1、环境: windows python3.7 2.安装pyinstaller pip3 install pyinstaller 3. 使用pyinstaller ...4.pyinstaller参数说明 -F 表示生成单个可执行文件 -w 表示去掉控制台窗口,这在GUI界面非常有用...
  • CreateProcessAsUser常用参数说明

    万次阅读 2017-07-31 21:32:47
    最近写代码,要把进程启到别的session下,要用到... 查阅了MSDN, 整理了参数说明供日后查阅。 先看函数原型 BOOL WINAPI CreateProcessAsUser( _In_opt_ HANDLE hToken, _In_opt_ LPCTSTR
  • JedisPoolConfig参数说明

    千次阅读 2018-07-26 11:30:58
    JedisPoolConfig配置参数详细说明 答: JedisPoolConfig config = new JedisPoolConfig(); //连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true 更多说明:...
  • tf.nn.conv2d() 参数说明

    万次阅读 多人点赞 2019-01-24 16:31:38
    对于初学者来说,他的参数也不是那么容易理解,只是了解到一点皮毛,并不能一下子就记住。下面我们来看一下他定义时的参数: def conv2d(input, # 张量输入 filter, # 卷积核参数 strides, # 步...
  • Swiper 参数说明

    万次阅读 2016-01-11 15:17:24
    Swiper 初始化 支持下列中的参数 Parameter(参数) Type(类型) Default Value(默认值 ...Description(说明) speed number 300 600 slides滑块动画之间的持续时间(单位ms) eventTarget stri

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,710,110
精华内容 1,084,044
关键字:

参数说明