前后端分离详解

 现在的趋势发展,需要把前后端开发和部署做到真正的分离做前端的谁也不想用Maven或者Gradle作为构建工具做后端的谁也不想要用Grunt或者Gulp作为构建工具

前后端需要通过接口来协作

 可能是JSON格式的RESTFul的接口可能是XML的接口重点是后台只负责数据的提供和处理,而完全不处理展现而前端则负责拿到数据,组织数据并开始展现的工作

Swagger

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。Swagger 让部署管理和使用功能强大的API从未如此简单。

项目图片

pom.xml

<!-- Swagger2强大RESTful API文档 -->
<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>

Swagger2配置类

package com.jege.spring.boot.swagger2;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
public class Swagger2 {// http://localhost:8080/swagger-ui.html// Swagger2默认将所有的Controller中的RequestMapping方法都会暴露,// 然而在实际开发中,我们并不一定需要把所有API都提现在文档中查看,这种情况下,使用注解// @ApiIgnore来解决,如果应用在Controller范围上,则当前Controller中的所有方法都会被忽略,// 如果应用在方法上,则对应用的方法忽略暴露API@Beanpublic Docket createRestApi() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage("com.jege.spring.boot.controller")).paths(PathSelectors.any()).build();}private ApiInfo apiInfo() {return new ApiInfoBuilder().title("je-ge的浆糊").description("je-ge的浆糊").termsOfServiceUrl("http://blog.csdn.net/je_ge").contact("je-ge").version("1.0").build();}}

控制器UserController

package com.jege.spring.boot.controller;import java.util.HashMap;
import java.util.Map;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;import com.jege.spring.boot.data.jpa.entity.User;
import com.jege.spring.boot.data.jpa.repository.UserRepository;
import com.jege.spring.boot.json.AjaxResult;import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;/*** 用户CRUD操作*/
@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserRepository userRepository;// 显示用户列表@RequestMapping("/list")public String list() {return "user";}// 显示用户json数据@ApiOperation(value = "获取用户列表,支持分页", notes = "json方法获取用户列表")@ApiImplicitParams({ @ApiImplicitParam(name = "page", value = "当前页码", required = true, dataType = "int"),@ApiImplicitParam(name = "rows", value = "每页条数", required = true, dataType = "int") })@RequestMapping("/json")@ResponseBodypublic Map<String, Object> json(@RequestParam(name = "page", defaultValue = "1") int page,@RequestParam(name = "rows", defaultValue = "10") int rows) {Pageable pageable = new PageRequest(page - 1, rows);return findEasyUidata(userRepository.findAll(pageable));}private <T> Map<String, Object> findEasyUidata(Page<T> page) {Map<String, Object> map = new HashMap<String, Object>();map.put("rows", page.getContent());map.put("total", page.getTotalElements());return map;}// 处理保存@ApiOperation(value = "保存用户", notes = "根据User对象操作用户")@ApiImplicitParam(name = "user", value = "用户详细实体user", required = true, dataType = "User")@RequestMapping("/save")@ResponseBodypublic AjaxResult save(User user) {userRepository.save(user);return new AjaxResult().success();}// 处理删除@ApiOperation(value = "删除用户", notes = "根据url的id来指定删除对象")@ApiImplicitParam(name = "id", value = "用户id", required = true, dataType = "Long")@RequestMapping("/delete")@ResponseBodypublic AjaxResult delete(Long id) {userRepository.delete(id);return new AjaxResult().success();}
}

如果感觉不错记得给我点赞哟!!!

Spring Boot swagger之前后端分离相关推荐

  1. spring boot+iview 前后端分离架构之用户管理的实现(三十)

    spring boot 与 iview 前后端分离架构之用户管理的实现(三十) 公众号 用户管理 相关工具类的实现 User实体改造 UserOrg实体改造 UserRole实体改造 UserRole ...

  2. phython在file同时写入两个_喜大普奔,两个开源的 Spring Boot + Vue 前后端分离项目可以在线体验了

    折腾了一周的域名备案昨天终于搞定了. 松哥第一时间想到赶紧把微人事和 V 部落部署上去,我知道很多小伙伴已经等不及了. 1. 也曾经上过线 其实这两个项目当时刚做好的时候,我就把它们部署到服务器上了, ...

  3. Spring Boot+Vue/前后端分离/高并发/秒杀实战课程之spring Security快速搭建oauth2 内存版身份认证

    Springboot快速搭建oauth2 内存版身份认证 环境准备 点击[Create New Project]创建一个新的项目 项目环境配置 配置Thymeleaf 搭建oauth2认证,加入两个依 ...

  4. spring boot+iview 前后端分离架构之文件上传的实现(三十一)

    spring boot 与 iview 前后端分离架构之文件上传的实现(三十一) 公众号 文件上传 前端改造 main.js引入配置的全局变量 编写baseImgUpload图片上传组件 baseIm ...

  5. spring boot+iview 前后端分离架构之前后端交互的实现(六)

    spring boot 与 iview 前后端分离架构之前后端交互的实现(六) axios的跨域访问工具的封装实现 实现前后端交互-后端的实现 实现前后端交互-前端的实现 bug修复 mysql的ma ...

  6. Spring Boot + Vue 前后端分离开发,权限管理的一点思路

    在传统的前后端不分的开发中,权限管理主要通过过滤器或者拦截器来进行(权限管理框架本身也是通过过滤器来实现功能),如果用户不具备某一个角色或者某一个权限,则无法访问某一个页面. 但是在前后端分离中,页面 ...

  7. Spring Boot + Vue 前后端分离开发,前端网络请求封装与配置

    前端网络访问,主流方案就是 Ajax,Vue 也不例外,在 Vue2.0 之前,网络访问较多的采用 vue-resources,Vue2.0 之后,官方不再建议使用 vue-resources ,这个 ...

  8. Spring Boot + Vue前后端分离项目,Maven自动打包整合

    前言 现在各类项目为了降低项目.服务模块间的高度耦合性,提出了"前后端分离",而前后端分离的项目该如何打包呢? 一般的做法是前端项目打包完,将打包文件手动复制到后端项目工程的src ...

  9. Spring Boot + Vue前后端分离(一)前端Vue环境搭建

    你好,[程序职场]专注于:Spring Boot ,微服务 和 前端APP开发,闲暇之余一起聊聊职场规划,个人成长,还能带你一起探索 副业赚钱渠道,在提升技术的同时我们一起交流 敏捷流程 提高工作效率 ...

最新文章

  1. OpenCV中 Mat 按行或按列合并程序
  2. shell MAC 地址 校验
  3. 转:Git_Windows 系统下Git安装图解
  4. cloud-init 工作原理 - 每天5分钟玩转 OpenStack(171)
  5. JVM - 再聊GC垃圾收集算法及垃圾收集器
  6. 全球及中国综艺节目产业营销策略分析及创新格局规划建议报告2021-2027年
  7. mongon命令(转)
  8. 工厂方法源码解析(jdk+logback)
  9. java中想要保留2位小数_java使double保留两位小数的多方法 java保留两位小数
  10. 2.Functions and Getting Help
  11. Matlab给Ansys助攻
  12. Luogu P2463 [SDOI2008]Sandy的卡片
  13. php 伪静态 获取当前页面路径_织梦移动适配PHP获取当前页面URL地址方法
  14. php ssl扩展,php如何安装openssl扩展?
  15. 递归算法分析-最简单的例子
  16. 使用T-SQL语句创建数据库
  17. Gridview中Dataformatstring的使用
  18. 编译libpng + zlib
  19. 如何删除Slader 大数智图PDF阅读器
  20. 随机产生一个五位数以内的数

热门文章

  1. php 替换某个字符,php中如何替换字符串中的某个字符-PHP问题
  2. mysql 压缩的blob不能正常显示中文内容_servlet网页显示MySQL BLOB中文乱码
  3. c语言取子程序地址,哪位师傅知道51单片机怎样编写子程序?C语言的。在主程序里调...
  4. 优酷视频如何修改账号密码?
  5. vue使用class添加动态类
  6. MongoDB解决“Error parsing YAML config file: yaml-cpp: error at line 2, column value(安装服务)
  7. linux远程连接最大数是多少,Linux Shell 脚本限制ssh最大用户登录数
  8. 操作痕迹包括那些_高级消防设施操作员专题之:走近气体灭火系统
  9. python程序设计方法_Python程序设计现代方法
  10. matlab数据处理 书,matlab数据处理记录