最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot + swagger 實(shí)例代碼

 更新時(shí)間:2017年05月08日 11:28:45   作者:趙計(jì)剛  
本篇文章主要介紹了springboot + swagger 實(shí)例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

swagger用于定義API文檔。

好處:

  1. 前后端分離開發(fā)
  2. API文檔非常明確
  3. 測(cè)試的時(shí)候不需要再使用URL輸入瀏覽器的方式來(lái)訪問(wèn)Controller
  4. 傳統(tǒng)的輸入U(xiǎn)RL的測(cè)試方式對(duì)于post請(qǐng)求的傳參比較麻煩(當(dāng)然,可以使用postman這樣的瀏覽器插件)
  5. spring-boot與swagger的集成簡(jiǎn)單的一逼

1、項(xiàng)目結(jié)構(gòu)

和上一節(jié)一樣,沒(méi)有改變。

2、pom.xml

引入了兩個(gè)jar。

<dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger2</artifactId>
      <version>2.2.2</version>
    </dependency>
    <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger-ui</artifactId>
      <version>2.2.2</version>
    </dependency>

3、Application.java

package com.xxx.firstboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import springfox.documentation.swagger2.annotations.EnableSwagger2;

@SpringBootApplication    //same as @Configuration+@EnableAutoConfiguration+@ComponentScan
@EnableSwagger2       //啟動(dòng)swagger注解
public class Application {

  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }

}

說(shuō)明:

引入了一個(gè)注解@EnableSwagger2來(lái)啟動(dòng)swagger注解。(啟動(dòng)該注解使得用在controller中的swagger注解生效,覆蓋的范圍由@ComponentScan的配置來(lái)指定,這里默認(rèn)指定為根路徑"com.xxx.firstboot"下的所有controller)

4、UserController.java

package com.xxx.firstboot.web;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.xxx.firstboot.domain.User;
import com.xxx.firstboot.service.UserService;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;

@RestController
@RequestMapping("/user")
@Api("userController相關(guān)api")
public class UserController {

  @Autowired
  private UserService userService;
  
//  @Autowired
//  private MyRedisTemplate myRedisTemplate;

  @ApiOperation("獲取用戶信息")
  @ApiImplicitParams({
    @ApiImplicitParam(paramType="header",name="username",dataType="String",required=true,value="用戶的姓名",defaultValue="zhaojigang"),
    @ApiImplicitParam(paramType="query",name="password",dataType="String",required=true,value="用戶的密碼",defaultValue="wangna")
  })
  @ApiResponses({
    @ApiResponse(code=400,message="請(qǐng)求參數(shù)沒(méi)填好"),
    @ApiResponse(code=404,message="請(qǐng)求路徑?jīng)]有或頁(yè)面跳轉(zhuǎn)路徑不對(duì)")
  })
  @RequestMapping(value="/getUser",method=RequestMethod.GET)
  public User getUser(@RequestHeader("username") String username, @RequestParam("password") String password) {
    return userService.getUser(username,password);
  }
  
//  @RequestMapping("/testJedisCluster")
//  public User testJedisCluster(@RequestParam("username") String username){
//    String value = myRedisTemplate.get(MyConstants.USER_FORWARD_CACHE_PREFIX, username);
//    if(StringUtils.isBlank(value)){
//      myRedisTemplate.set(MyConstants.USER_FORWARD_CACHE_PREFIX, username, JSON.toJSONString(getUser()));
//      return null;
//    }
//    return JSON.parseObject(value, User.class);
//  }
  
}

說(shuō)明:
1、@Api:用在類上,說(shuō)明該類的作用

2、@ApiOperation:用在方法上,說(shuō)明方法的作用

3、@ApiImplicitParams:用在方法上包含一組參數(shù)說(shuō)明

4、@ApiImplicitParam:用在@ApiImplicitParams注解中,指定一個(gè)請(qǐng)求參數(shù)的各個(gè)方面

   1、paramType:參數(shù)放在哪個(gè)地方 header-->請(qǐng)求參數(shù)的獲取:@RequestHeader

      ①query-->請(qǐng)求參數(shù)的獲?。篅RequestParam

      ② path(用于restful接口)-->請(qǐng)求參數(shù)的獲取:@PathVariable

      ③body(不常用)

      ④ form(不常用)

   2、name:參數(shù)名

   3、dataType:參數(shù)類型

   4、required:參數(shù)是否必須傳

   5、value:參數(shù)的意思

   6、defaultValue:參數(shù)的默認(rèn)值

5、@ApiResponses:用于表示一組響應(yīng)

6、@ApiResponse:用在@ApiResponses中,一般用于表達(dá)一個(gè)錯(cuò)誤的響應(yīng)信息

   1、code:數(shù)字,例如400

   2、message:信息,例如"請(qǐng)求參數(shù)沒(méi)填好"

   3、response:拋出異常的類

7、@ApiModel:描述一個(gè)Model的信息(這種一般用在post創(chuàng)建的時(shí)候,使用@RequestBody這樣的場(chǎng)景,請(qǐng)求參數(shù)無(wú)法使    

    1、@ApiImplicitParam注解進(jìn)行描述的時(shí)候) @ApiModelProperty:描述一個(gè)model的屬性

以上這些就是最常用的幾個(gè)注解了。

需要注意的是:

ApiImplicitParam這個(gè)注解不只是注解,還會(huì)影響運(yùn)行期的程序,例子如下:

  

如果ApiImplicitParam中的phone的paramType是query的話,是無(wú)法注入到rest路徑中的,而且如果是path的話,是不需要配置ApiImplicitParam的,即使配置了,其中的value="手機(jī)號(hào)"也不會(huì)在swagger-ui展示出來(lái)。

具體其他的注解,查看:https://github.com/swagger-api/swagger-core/wiki/Annotations#apimodel

 測(cè)試:

啟動(dòng)服務(wù),瀏覽器輸入"http://localhost:8080/swagger-ui.html"

 

最上邊一個(gè)紅框:@Api

GET紅框:method=RequestMethod.GET

右邊紅框:@ApiOperation

parameter紅框:@ApiImplicitParams系列注解

response messages紅框:@ApiResponses系列注解

輸入?yún)?shù)后,點(diǎn)擊"try it out!",查看響應(yīng)內(nèi)容:

 

 以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java使用POI-TL實(shí)現(xiàn)生成有個(gè)性的簡(jiǎn)歷

    Java使用POI-TL實(shí)現(xiàn)生成有個(gè)性的簡(jiǎn)歷

    POI-TL?是一個(gè)基于?Apache?POI?的?Java?庫(kù),專注于在?Microsoft?Word?文檔(.docx?格式)中進(jìn)行模板填充和動(dòng)態(tài)內(nèi)容生成,下面我們看看如何使用POI-TL生成有個(gè)性的簡(jiǎn)歷吧
    2024-11-11
  • Java按照List內(nèi)存儲(chǔ)的對(duì)象的某個(gè)字段進(jìn)行排序的實(shí)例

    Java按照List內(nèi)存儲(chǔ)的對(duì)象的某個(gè)字段進(jìn)行排序的實(shí)例

    下面小編就為大家?guī)?lái)一篇Java按照List內(nèi)存儲(chǔ)的對(duì)象的某個(gè)字段進(jìn)行排序的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-12-12
  • Java基礎(chǔ)知識(shí)之成員變量和局部變量淺顯易懂總結(jié)

    Java基礎(chǔ)知識(shí)之成員變量和局部變量淺顯易懂總結(jié)

    從語(yǔ)法形式上,看成員變量是屬于類的,而局部變量是在方法中定義的變量或是方法的參數(shù);成員變量可以被public,private,static等修飾符所修飾,而局部變量不能被訪問(wèn)控制修飾符及static所修飾
    2021-09-09
  • JAVA 深層拷貝 DeepCopy的使用詳解

    JAVA 深層拷貝 DeepCopy的使用詳解

    最近需要用到比較兩個(gè)對(duì)象屬性的變化,其中一個(gè)是oldObj,另外一個(gè)是newObj,oldObj是newObj的前一個(gè)狀態(tài),所以需要在newObj的某個(gè)狀態(tài)時(shí),復(fù)制一個(gè)一樣的對(duì)象,由于JAVA不支持深層拷貝,因此專門寫了一個(gè)方法
    2013-07-07
  • java常量字符串過(guò)長(zhǎng)報(bào)錯(cuò)的解決辦法以及原因分析

    java常量字符串過(guò)長(zhǎng)報(bào)錯(cuò)的解決辦法以及原因分析

    在IDEA中字符串長(zhǎng)度超過(guò)65535,進(jìn)行打印,IDEA會(huì)提示java:常量字符串過(guò)長(zhǎng),這篇文章主要給大家介紹了關(guān)于java常量字符串過(guò)長(zhǎng)報(bào)錯(cuò)的解決辦法以及原因分析,需要的朋友可以參考下
    2023-01-01
  • 利用寶塔配置jdk環(huán)境的詳細(xì)圖文教程

    利用寶塔配置jdk環(huán)境的詳細(xì)圖文教程

    最近在寶塔面板上創(chuàng)建一個(gè)網(wǎng)站,為Java應(yīng)用程序提供運(yùn)行環(huán)境,所以下面這篇文章主要給大家介紹了關(guān)于利用寶塔配置jdk環(huán)境的詳細(xì)圖文教程,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • Centos中安裝jdk案例講解

    Centos中安裝jdk案例講解

    這篇文章主要介紹了Centos中安裝jdk案例講解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Java計(jì)算球從100米高度自由落下問(wèn)題

    Java計(jì)算球從100米高度自由落下問(wèn)題

    這篇文章主要介紹了Java球從100米高度自由落下問(wèn)題,需要的朋友可以參考下
    2017-02-02
  • springboot為異步任務(wù)規(guī)劃自定義線程池的實(shí)現(xiàn)

    springboot為異步任務(wù)規(guī)劃自定義線程池的實(shí)現(xiàn)

    本文主要介紹了springboot為異步任務(wù)規(guī)劃自定義線程池,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • java開發(fā)之Jdbc分頁(yè)源碼詳解

    java開發(fā)之Jdbc分頁(yè)源碼詳解

    這篇文章主要介紹了java開發(fā)之Jdb分頁(yè)源碼詳解,需要的朋友可以參考下
    2020-02-02

最新評(píng)論

青田县| 浦东新区| 新泰市| 无为县| 凤城市| 敖汉旗| 怀远县| 莲花县| 莲花县| 邵阳县| 靖宇县| 靖边县| 武夷山市| 荆州市| 广水市| 香港 | 女性| 临潭县| 康平县| 大同市| 和顺县| 利辛县| 吉木萨尔县| 双城市| 响水县| 商河县| 达孜县| 永德县| 乌鲁木齐市| 贵定县| 惠来县| 江北区| 沁水县| 和田市| 金乡县| 屏山县| 宁德市| 兰坪| 铜川市| 改则县| 锡林郭勒盟|