精华内容
下载资源
问答
  • 前言有时候,我们在开发中有时候会需要用到后端去请求别人的接口,然后发送一些数据,所以今天就教大家请求Post接口并发送list对象或普通参数的方法。引入mavenorg.apache.httpcomponentshttpclient4.5.1...

    前言

    有时候,我们在开发中有时候会需要用到后端去请求别人的接口,然后发送一些数据,所以今天就教大家请求Post接口并发送list对象或普通参数的方法。

    引入maven

    org.apache.httpcomponents

    httpclient

    4.5.1

    com.google.code.gson

    gson

    2.8.5

    com.google.code.gson

    gson

    2.8.5

    编写工具类package cn.zoshu.common.utils;

    import org.apache.http.HttpEntity;

    import org.apache.http.client.methods.CloseableHttpResponse;

    import org.apache.http.client.methods.HttpPost;

    import org.apache.http.entity.StringEntity;

    import org.apache.http.impl.client.CloseableHttpClient;

    import org.apache.http.impl.client.HttpClients;

    import org.apache.http.message.BasicHeader;

    import org.apache.http.protocol.HTTP;

    import org.apache.http.util.EntityUtils;

    /**

    *

    **/

    public class PostJsonUtils

    {

    public static String sendJson(String url, String param) throws Exception{

    String body = "";

    //创建httpclient对象

    CloseableHttpClient client = HttpClients.createDefault();

    //创建post方式请求对象

    HttpPost httpPost = new HttpPost(url);

    //装填参数

    StringEntity s = new StringEntity(param, "utf-8");

    s.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,

    "application/json"));

    //设置参数到请求对象中

    httpPost.setEntity(s);

    System.out.println("请求地址:"+url);

    //设置header信息

    httpPost.setHeader("Content-type", "application/json");

    httpPost.setHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");

    //执行请求操作,并拿到结果(同步阻塞)

    CloseableHttpResponse response = client.execute(httpPost);

    //获取结果实体

    HttpEntity entity = response.getEntity();

    if (entity != null) {

    //按指定编码转换结果实体为String类型

    body = EntityUtils.toString(entity);

    }

    EntityUtils.consume(entity);

    //释放链接

    response.close();

    return body;

    }

    }

    后端请求List warns= Lists.newArrayList();

    Warn warn=new Warn();

    warn.setDeptId(1);

    warn.setDeptName("asdasd");

    warn.setProjectId(2);

    warn.setProjectName("zxczxc");

    warn.setDeviceName("阿斯达");

    warn.setDeviceType("1");

    warn.setWarningType("1");

    warns.add(warn);

    warn=new Warn();

    warn.setDeptId(3);

    warn.setDeptName("weqwe");

    warn.setProjectId(4);

    warn.setProjectName("erferf");

    warn.setDeviceName("僵尸洞");

    warn.setDeviceType("1");

    warn.setWarningType("1");

    warns.add(warn);

    Gson gson=new Gson();

    String s = gson.toJson(warns);

    String post = HttpUtils.send("http://localhost:10594/warning", s);

    return post;

    你还没有登录,请先使用 QQ登录 或 注册!

    文章评论

    发表评论

    展开全文
  • 对接微信公众号比较简单,官网有详细的操作指南,但是微信支付却遇到了较大的困难,主要是因为官方的文档较为简陋,且代码演示是JAVA语言,在查阅了大量网上教程并摸索实践后,终于成功对接了微信支付,这篇文章在...


    注意:原创文章,转载请注明出处。

    引言

    我从未想到就调两个接口那么难!

    前段时间由于项目需要,开发的应用对接了微信公众号、微信支付。对接微信公众号比较简单,官网有详细的操作指南,但是微信支付却遇到了较大的困难,主要是因为官方的文档较为简陋,且代码演示是JAVA语言,在查阅了大量网上教程并摸索实践后,终于成功对接了微信支付,这篇文章在分享技术的同时,也算是回炉温习。

    一、流程简述&难点简析

    发起微信支付的后端流程:前期准备 => 调用微信支付“统一下单”接口生成订单 => 生成参数提供前端生成支付窗口。

    整个流程并不复杂,难点在于捋清整个流程以及各个参数的收集或生成,既然流程已经清楚了,那么就按照流程一步步走。

    二、前期准备

    前期准备是收集后续使用到的参数,这里默认已经开通了公众平台服务号、微信商户平台账号(微信支付),并将公众号和商户平台账号绑定,同时公众号和微信支付都授权了后端服务器,那么你将会获得下面参数信息:
    ①公众号APPID
    ②公众号APPSECRET
    ③商户ID
    ④商户API密钥

    三、统一下单

    准备工作做好后,接下来是最大的挑战——调用微信支付“统一下单”接口生成订单,我们来看看接口需要提供哪些参数:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    那么多参数,有些不是必要的,那么必填的参数有:

    1. appid: 公众账号ID (已有)
    2. mch_id: 商户号 (已有)
    3. nonce_str: 随机字符串
    4. sign: 签名
    5. body: 商品描述
    6. out_trade_no: 商户订单号
    7. total_fee: 标价金额
    8. spbill_create_ip: 终端IP
    9. notify_url: 通知地址
    10. trade_type: 交易类型
    11. openid: 用户标识

    前两个参数已经有了,从第三个参数开始收集:
    ① nonce_str: 调用random函数生成随机字符串即可(32位以内)
    ② sign: 在其他参数完成后,将所有非空参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA,
    在字符串最后拼接上key(即商户API密钥),然后对字符串进行MD5运算,最后将得到的所有字符串转化大写,示例代码:
    在这里插入图片描述
    ③body: 自定义
    ④out_trade_no: 自定义,保证商户内唯一
    ⑤total_fee: 支付金额,默认单位为“分”
    ⑥spbill_create_ip: 用户IP,从request里获取
    ⑦notify_url: 搭建一个接口接收用户支付情况
    ⑧trade_type: 公众号支付填“JSAPI”
    ⑨openid: 公众号交互获取
    注意:统一参数名和参数值的编码格式,避免编码错误。

    参数准备完成,将参数转化为XML格式,即可调用接口。

    四、生成前端所需参数

    前端执行JS调起支付需要的参数有:
    在这里插入图片描述
    我们可以看到都是必要参数,前面4个都比较好获取,package是由后端调用“统一下单”接口后获取的prepay_id,paySign签名则是和前面叙述过的生成方法一样。

    不同的是,参数收集完毕后,不需要转化为XML格式,直接以JSON格式传给前端,前端拿到数据后调起支付窗口的代码如下:
    在这里插入图片描述

    五、总结

    微信支付被网上评价是所有支付中最好对接的,把流程捋清后发现确实不难,但因为官方文档过于青涩,网上又多是不捋思路,光一堆代码抛上来的“教程”,因此更让初学者感到无从下手。

    希望这篇文章能给大家带来帮助和启发。

    展开全文
  • tutorials:该项目是一系列小而专注的教程 - 每个教程都涵盖 Java 生态系统中单一且定义明确的开发领域。 当然,它们的重点是 Spring Framework - Spring,Spring Boot 和 Spring Securiyt。 除了 Spring 之外,还有...
  • 系统之间交互需要使用远程通信,接口开发增加工作量。 2.3.3. 技术选型(主要技术) l Spring、SpringMVC、Mybatis l JSP、JSTL、jQuery、jQuery plugin、EasyUI、KindEditor(富文本编辑器)、CSS+DIV l ...
  • 我们在进行后端开发的时候,主要的工作就是为前端或者其他后端服务提供 API 比如查询用户数据的 API 。RESTful API 是一种基于 REST 构建的 API,它是一种被设计的更好使用的 API。 相关阅读:RestFul API 简明教程 ...
  • 我们在进行后端开发的时候,主要的工作就是为前端或者其他后端服务提供 API 比如查询用户数据的 API 。RESTful API 是一种基于 REST 构建的 API,它是一种被设计的更好使用的 API。 相关阅读:RestFul API 简明教程 ...
  • Vue详细回顾之旅

    2020-12-17 10:17:50
    用户的后端接口写得七七八八了。但是没有前端页面的展示,具体的画面都是自己脑海中展示,太过于虚拟化了。 前端已经有半年也没碰过了。大多知识都停留在概念阶段,许多方法都遗忘了差不多了,如今是时候重新拿起来...

    用户的后端接口写得七七八八了。但是没有前端页面的展示,具体的画面都是自己脑海中展示,太过于虚拟化了。
    前端已经有半年也没碰过了。大多知识都停留在概念阶段,许多方法都遗忘了差不多了,如今是时候重新拿起来回顾一下。毕竟基础的前端知识作为web开发的程序员还是要掌握的。
    太基础的html那些就不复习了,那些学校耗费一学期的课程进行教学,难度也不大。就直接复习Vue前端框架吧。
    以下都是我2月份跟着教程学习的前端知识。重新拿着笔记,实践一下,再描述一下自己的思想,回顾上手。

    1.vue的概念
    Vue是渐进式JavaScript框架。何为渐进式呢?就是用你想用或者能用的功能特性,你不想用的部分功能可以先不用。vue不强求你一次性接受并使用它的全部功能特性。例如:我们的项目规模逐渐的变大了,我们可能会逐渐用到前端路由、状态集中管理、并最终实现一个高度工程化的前端项目。这些功能特性我们可以逐步引入,当然不用也可以。

    2.Vue开发的流程
    声明式渲染->组件系统-> 客户端路由->集中式状态管理 ->项目构建
    上面所述都是专业名词。后面会一一讲解。

    3.Vue的优势
    我在没学Vue的时候都是使用JavaScript和jQuery进行网页前端的开发。开发效率繁琐,复用性不高。而Vue带开发便捷高效的开发组件和函数库。
    易用:熟悉HTML,CSS,JavaScript知识后,可快速上手Vue
    灵活:在一个库和一套完整框架之间自如伸缩
    高效:20kB运行大小,超快虚拟 DOM

    4.Vue的基本使用
    首先我得引进vue.js。这里有两种方式:1在线引用,2下载本地引用
    我使用在线引用
    < script src=“https://cdn.jsdelivr.net/npm/vue/dist/vue.js”></ script>
    完整代码如下

    <!DOCTYPE html>
    <html lang="en">
        <head>
            <title></title>
            <meta charset="UTF-8">
        </head>
        <body>
            <div id="app">
                <div>{{msg}}</div>
                </div>
        </body>
            <script type="text/javascript">
            new Vue({
            el: '#app',
            data: {
            msg: 'HelloWorld'
            }
            })
        </script>
    </html>
    

    在这里插入图片描述
    已成功将vue实例中的HelloWorld渲染到标签,然后展示在页面
    可见vue其实就是在标签内的一个实例。
    我来将它进行解剖分析一下。
    a. 实例参数分析
    el: 元素的挂载位置(值可以是CSS选择器或者Dom元素)
    data:模型数据(值是一个对象)
    b. 插值表达式用法
    {{}}两个花括弧就是插值表达式
    将数据填充到HTML标签中
    插值表达式支持基本计算操作
    c. Vue代码运行原理分析
    概述编译过程的概念(Vue语法->原ࣿ生语法)

    5 vue的模板语法
    你是否有这个疑问:vue是如何将数据渲染到标签内部的差值表达式内呢?
    回想之前的渲染方式:
    都是使用document对象进行填充渲染的。

    var d = data.weather;
    var info = document.getElementById('info');
    info.innerHTML = '';
    for(var i=0;i<d.length;i++){
    var date = d[i].date;
    var day = d[i].info.day;
    var night = d[i].info.night;
    var tag = '';
    tag += '<span>日期:'+date+'</sapn><ul>';
    tag += '<li>白天天气:'+day[1]+'</li>'
    tag += '<li>白天温度:'+day[2]+'</li>'
    tag += '<li>白天风向:'+day[3]+'</li>'
    tag += '<li>白天风速:'+day[4]+'</li>'
    tag += '</ul>';
    var div = document.createElement('div');
    div.innerHTML = tag;
    info.appendChild(div);
    }
    

    上面使用js拼接,然后再使用dom对象插入标签体中。

    再高级一点我可以使用jsp类似的模板技术:模板引擎art-template。

    <script id="abc" type="text/html">
    {{if isAdmin}}
    <h1>{{title}}</h1>
    <ul>
    {{each list as value i}}
    <li>索引 {{i + 1}}{{value}}</li>
    {{/each}}
    </ul>
    {{/if}}
    </script>
    

    那如何使用vue的模板语法进行渲染呢?不急。咱们先看看vue模板语法的基本用法。

    6.指令
    指令是使用Vue的核心知识。需要好好掌握。
    指令的本质就是自定义属性
    指令的格式:以v-开始(比如:v-cloak)
    指令有很多,我今天将他们分好类。便于咱们以后的开发使用。
    常用指令:

    1. 数据绑定指令:
    v-text: 填充纯文本{相比比插值表达式更加简洁}
    v-html: 填充HTML片段{存在安全问题}
    v-pre:填充原始信息{显原始信息,跳过编译过程{分析编译过程}}
    代码示例:

    <html lang="en">
        <head>
            <title></title>
            <meta charset="UTF-8">
        </head>
        <body>
            <div id="app">
                <span>这是:{{}}渲染:</span>
                <div>{{msg}}</div>
                <span>这是:v-text渲染:</span>
                <span v-text="msg"></span>
                <br> 
                <span>这是:v-html渲染:</span>
                <p v-html="msg"></p>
                </div>
        </body>
            <script type="text/javascript">
            new Vue({
            el: '#app',
            data: {
            msg: '<strong>Hello</strong> Vue!'
            }
            })
        </script>
    </html>
    

    在这里插入图片描述
    可以开出v-text与花括号的功能是一样的,直接将msg中的内容渲染到页面。
    但是v-html就能把标签进行解析

    2. 数据响应式
    数据的变化导致页面内容的变化
    双向数据绑定指令
    v-model指令用法
    < input type=‘text’ v-model=‘uname’/>

    <html lang="en">
        <head>
            <title></title>
            <meta charset="UTF-8">
        </head>
        <body>
            <div id="app">
                <span>这是:{{}}渲染:</span>
                <div>{{msg}}</div>
                <input type='text' v-model='msg'/>
                </div>
        </body>
            <script type="text/javascript">
            new Vue({
            el: '#app',
            data: {
            msg: ' Vue!'
            }
            })
        </script>
    </html>
    

    在这里插入图片描述
    它将msg与输入框内容进行绑定,输入是什么,花括号里就会随之动态变化。
    3. 事件绑定
    v-on指令用法
    < input type=‘button’ v-on:click=‘num++’/>
    v-on简写形式
    <input type=‘button’ @click=‘num++’/>

     <!DOCTYPE html>
    <html lang="en">
        <head>
            <title></title>
            <meta charset="UTF-8">
        </head>
        <body>
            <div id="app">
                <span>这是:{{}}渲染:</span>
                <div>{{num}}</div>
                <input type='button' v-on:click='num++'>
                </div>
        </body>
            <script type="text/javascript">
            new Vue({
            el: '#app',
            data: {
            msg: ' Vue!',
            num:0
            }
            })
        </script>
    </html>
    

    在这里插入图片描述
    点击一下就会加一,也随之展示出来
    调用函数事件
    直接绑定函数名称
    < button v-on:click=‘say’>Hello</ button>
    调用函数
    < button v-on:click=‘say()’>Say hi</ button>
    往函数传参
    < button v-on:click=‘say(“hi”,$event)’>Say hi</ button>

    <!DOCTYPE html>
    <html lang="en">
        <head>
            <title></title>
            <meta charset="UTF-8">
        </head>
        <body>
            <div id="app">
                <span>这是:{{}}渲染:</span>
                <div>{{num}}</div>
                <input type='button' v-on:click='addNum'>
                </div>
        </body>
            <script type="text/javascript">
            new Vue({
            el: '#app',
            data: {
            msg: ' Vue!',
            num:0
            },
            methods:{
                addNum:function(){
                    this.num++;
                }
            }
            })
        </script>
    </html>
    

    在这里插入图片描述
    直接定义一个方法,调用方法改变全局变量。
    事件修饰符:就是事件在做出某种具体操作时触发的情况
    .stop 阻止冒泡
    < a v-on:click.stop=“handle”>跳转</ a>
    .prevent 阻止默认行为
    < a v-on:click.prevent=“handle”>跳转< /a>
    .enter 回车键
    < input v-on:keyup.enter=‘submit’>
    .esc 退出键
    < input v-on:keyup.delete=‘handle’>

    1. 属性绑定
      v-bind指令用法
      < a v-bind:href=‘url’>跳转< /a>
      简写形式
      < a :href=‘url’>跳转</ a>
    2. 样式绑定
      class样式处理
      < div v-bind:class="{ active: isActive }"></ div>

      < div v-bind:class="[activeClass, errorClass]"></ div>
      style样式处理
      < div v-bind:style="{ color: activeColor, fontSize: fontSize }"></ div>

      < div v-bind:style="[baseStyles, overridingStyles]"></ div>
      这个就不写代码了。就是在data实例定义动态的变量,然后在标签中进行赋值的操作。
    3. 分支循环结构
      v-if
      v-else
      v-else-if
      v-show
      v-if与v-show的区别
      v-if控制元素是否渲染到页面
      v-show控制元素是否显示(已经渲染到了页面)
      < li v-for=‘item in list’>{{item}}< /li>
      < li v-for=’(item,index) in list’>{{item}} + ‘—’ +{{index}}</ li>
      key的作用:帮助Vue区分不同的元素,从而提升性能
      < li :key=‘item.id’ v-for=’(item,index) in list’>{{item}} + ‘—’ {{index}}< /li>
      v-for遍历对象
      < div v-for=’(value, key, index) in object’></ div>
      v-if和v-for结合使用
      < div v-if=‘value==12’ v-for=’(value, key, index) in object’></ div>
    <!DOCTYPE html>
    <html lang="en">
        <head>
            <title></title>
            <meta charset="UTF-8">
        </head>
        <body>
            <div id="app">
                <li :key='item.id' v-for='(item,index) in list'>{{item}} + '---' {{index}}</li>
                </div>
        </body>
            <script type="text/javascript">
            new Vue({
            el: '#app',
            data: {
            msg: ' Vue!',
            list:['张三','李四','王五']
            },
            methods:{
                addNum:function(){
                    this.num++;
                }
            }
            })
        </script>
    </html>
    

    在这里插入图片描述

    今天的复习就到此结束。基本用法已经回顾了。

    分享一句话:

    人生的选择没有100%正确的,我们要做的就是把我们的每一次选择变成正确的
    
    展开全文
  • 现在开发,很多采用前后端分离的模式,前端只负责调用接口,进行渲染,前端和后端的唯一联系,变成了API接口。因此,API文档变得越来越重要。swagger是一个方便我们更好的编写API文档的框架,而且swagger可以模拟...

    Java教程分享Swagger使用方法:1.swagger介绍

    现在开发,很多采用前后端分离的模式,前端只负责调用接口,进行渲染,前端和后端的唯一联系,变成了API接口。因此,API文档变得越来越重要。swagger是一个方便我们更好的编写API文档的框架,而且swagger可以模拟http请求调用。

    大部分采取的方式:Vue + SpringBoot,Vue通过js渲染页面,后端把数据传递给js,早期前端只负责写页面,然后把写好的HTML页面给后端,后端使用模板引擎(Jsp,Thymeleaf、 freemarker)进行开发。

    前后端分离的好处:各自开发,相对独立,松耦合,前后端通过API进行交互,后端提供接口给前端,前端去调用该接口,但可能会导致前后端团队人员不能做到及时协商,出现一些问题。解决方式:早期使用实时更新文档,但非常繁琐,后来又使用postman来进行一些测试。

    2.springboot中集成swagger使用步骤:

    导入依赖

    io.springfox

    springfox-swagger-ui

    2.9.2

    io.springfox

    springfox-swagger2

    2.9.2

    创建配置类

    @Configuration
    @EnableSwagger2//开启Swagger2
    public class SwaggerConfig {

    }

    然后启动测试运行,看到如下页面:

    手动配置实例,修改SwaggerConfig配置类

    package com.qf.swagger.config;

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import springfox.documentation.builders.ApiInfoBuilder;
    import springfox.documentation.builders.PathSelectors;
    import springfox.documentation.builders.RequestHandlerSelectors;
    import springfox.documentation.service.ApiInfo;
    import springfox.documentation.spi.DocumentationType;
    import springfox.documentation.spring.web.plugins.Docket;
    import springfox.documentation.swagger2.annotations.EnableSwagger2;

    @Configuration
    @EnableSwagger2//开启Swagger2
    public class SwaggerConfig {

    //配置Swagger的Bean实例
    @Bean
    public Docket swaggerSpringMvcPlugin() {
    return new Docket(DocumentationType.SWAGGER_2)
    .apiInfo(apiInfo());
    }

    //配置API的基本信息(会在http://项目实际地址/swagger-ui.html页面显示)
    private ApiInfo apiInfo() {
    return new ApiInfoBuilder()
    .title(“测试API文档标题”)
    .description(“测试api接口文档描述”)
    .termsOfServiceUrl(“http://www.baidu.com”)
    .version(“1.0”)
    .build();
    }
    }

    然后再次重启测试运行:

    创建实体类

    package com.qf.swagger.entity;

    import io.swagger.annotations.ApiModel;
    import io.swagger.annotations.ApiModelProperty;

    @ApiModel(“用户实体类”)
    public class User {

    @ApiModelProperty(“用户名”)
    private String username;
    @ApiModelProperty(“密码”)
    private String password;

    public String getUsername() {
    return username;
    }

    public void setUsername(String username) {
    this.username = username;
    }

    public String getPassword() {
    return password;
    }

    public void setPassword(String password) {

    this.password = password;
    }
    }

    创建controller

    package com.qf.swagger.controller;

    import com.qf.swagger.entity.User;
    import io.swagger.annotations.Api;
    import io.swagger.annotations.ApiOperation;
    import io.swagger.annotations.ApiParam;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;

    @Api(description =“用户管理API”)
    @RestController
    public class UserController {

    @ApiOperation(“添加用户”)
    @PostMapping("/add")
    public User add(@ApiParam(“用户名”) String username,@ApiParam(“密码”) String password){

    return new User();
    }

    @ApiOperation(“修改用户”)
    @PostMapping("/update")
    public String update(){
    return “修改”;
    }

    @ApiOperation(“删除用户”)
    @GetMapping("/delete")
    public Boolean delete(@ApiParam(“用户编号”) Integer id){
    return true;

    }

    @ApiOperation(“查询用户”)
    @RequestMapping("/query")
    public User query(){

    User user = new User();
    user.setUsername(“jack”);
    user.setPassword(“1234”);

    return user;
    }
    }

    修改SwaggerConfig配置类

    package com.qf.swagger.config;

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import springfox.documentation.builders.ApiInfoBuilder;
    import springfox.documentation.builders.RequestHandlerSelectors;
    import springfox.documentation.service.ApiInfo;
    import springfox.documentation.spi.DocumentationType;
    import springfox.documentation.spring.web.plugins.Docket;
    import springfox.documentation.swagger2.annotations.EnableSwagger2;

    @Configuration
    @EnableSwagger2//开启Swagger2
    public class SwaggerConfig {

    //配置Swagger的Bean实例

    @Bean

    public Docket swaggerSpringMvcPlugin() {

    return new Docket(DocumentationType.SWAGGER_2)
    .apiInfo(apiInfo())

    .groupName(“yangl”)//分组名称(可以创建多个Docket就有多个组名)

    .enable(true)//enable表示是否开启Swagger

    .select()
    //RequestHandlerSelectors指定扫描的包
    .apis(RequestHandlerSelectors.basePackage(“com.qf.swagger.controller”))

    .build();
    }

    //配置API的基本信息(会在http://项目实际地址/swagger-ui.html页面显示)
    private ApiInfo apiInfo() {
    return new ApiInfoBuilder()
    .title(“测试API文档标题”)
    .description(“测试api接口文档描述”)
    .termsOfServiceUrl(“http://www.baidu.com”)
    .version(“1.0”)
    .build();
    }

    }

    swagger通过注解表明该接口会生成文档,包括接口名、请求方法、参数、返回信息

    @Api:修饰整个类,描述Controller的作用

    @ApiOperation:描述一个类的一个方法,或者说一个接口

    @ApiModel:用对象来接收参数 ,修饰类

    @ApiModelProperty:用对象接收参数时,描述对象的一个字段

    @ApiResponse:HTTP响应其中1个描述

    @ApiResponses:HTTP响应整体描述,一般描述错误的响应

    @ApiIgnore:使用该注解忽略这个API

    @ApiError :发生错误返回的信息

    @ApiParam:单个参数描述

    @ApiImplicitParam:一个请求参数,用在方法上

    @ApiImplicitParams:多个请求参数

    展开全文
  • 我们在进行后端开发的时候,主要的工作就是为前端或者其他后端服务提供 API 比如查询用户数据的 API 。RESTful API 是一种基于 REST 构建的 API,它是一种被设计的更好使用的 API。 相关阅读:RestFul API 简明教程 ...
  • 从Java基础、JavaWeb基础到常用的框架再到面试题都有完整的教程,几乎涵盖了Java后端必备的知识点。该开源仓库的文章都是我个人原创,公众号发过的技术文章(干货)也会有相关的目录整理,很多知识点我还在不停的...
  • 背景:  小程序累计独立访客(UV)不低于 1000,就可以开通流量主,需要1000个实实在在的用户,不是访问量。  通过朋友圈,微信群... 第一步:使用你擅长的后端开发框架,做一个简单的接口java – spring 或 pyth
  • 零代码、热更新、自动化 ORM 库 后端接口和文档零代码,前端(客户端) 定制返回 JSON 的数据和结构 English 通用文档 视频教程 在线体验 导航目录: 项目简介 上手使用 ...
  • Java 后端开发 大数据/数据仓库 Java基础 学什么? 怎么学? 视频学习 精选书籍推荐 面试系列 Java进阶 学什么? 怎么学? 精选书籍推荐 Java注解 Java8实战系列 数据结构和算法 学什么? 怎么...
  • 提供详细的导入教程、使用教程开发教程,对于想深入了解的用户还提供了搭建教程 文档与教程 在这浮躁的社会里,还请您耐心阅读文档,99%的问题在文档中都能找到答案。 文档 地址 项目导入教程 ...
  • SpringBoot系列之项目中缓存使用详细教程 >> source download 5.2 集成Redis教程 SpringBoot系列之集成Redis实现缓存处理 >> source download 六、消息队列篇 6.1 消息队列之RabbitMQ ...
  • Java后端实习面经,电子科大大三读者投稿!看了之后感触颇深!很开心! 敖丙读者只复习了半年,怒拿字节跳动Offer 敖丙读者一个月面试近20家大中小厂,在互联网寒冬突破重围,成功上岸阿里云 ! 程序人生系列 从...
  • Android Studio详细教程.mobi Android Training官方培训课程中文版.epub Android 开发最佳实践.epub Android 开源数字图像处理.epub Android6.0 新特性详解.epub Android四大组件.epub Android屏幕适配全攻略(最权威...
  • Android Studio详细教程.mobi Android Training官方培训课程中文版.epub Android 开发最佳实践.epub Android 开源数字图像处理.epub Android6.0 新特性详解.epub Android四大组件.epub Android屏幕适配全攻略(最权威...
  • v3.1 新增微信支付官方接口 自动回调 提供个人申请教程(需一定开通成本) v3.0 新增支付宝当面付 官方接口 自动回调 提供个人申请教程 v2.0 支付宝新增扫码点单收款,暂无风控,支持一键打开支付宝APP v1.9 ...
  • 文档是对项目开发过程中遇到的一些问题的详细记录,主要是为了帮助没有基础的小伙伴快速理解这个项目。 该项目框架虽然已经基本完成,但是,但是,但是,开发中一些问题整理还欠缺,迫不及待的想要分享给大家,提前...
  • 思维导图 和java相关的 更多干货 分布式实战(干货) spring cloud 实战(干货) mybatis 实战(干货) spring boot 实战(干货) React 入门实战(干货) 构建中小型互联网企业架构(干货) ...
  • 打印go的详细数据结构 https://github.com/davecgh/go-spew 基于ringbuffer实现的队列 https://github.com/eapache/queue 拼音 https://github.com/go-ego/gpy 分词 https://github.com/go-ego/gse ...

空空如也

空空如也

1 2
收藏数 25
精华内容 10
关键字:

java后端接口开发详细教程

java 订阅