【项目经验】用Spring Boot编写RESTful API (on MAC IDEA)(未完)

本文档是一份详细的Spring Boot RESTful API开发教程,涵盖从创建项目到使用Mybatis、Spring Security、WebSocket及事务管理等多个方面。通过实例讲解如何使用Spring Boot构建RESTful API,包括控制器详解、数据校验、文件上传下载、日志记录、数据库事务、Mybatis集成以及Spring Security保护API等核心知识点。
摘要由CSDN通过智能技术生成

https://study.163.com/course/courseMain.htm?courseId=1005213034

章节1 开始一个最简单的RESTful API项目
   课时1 什么是RESTful API
   课时2 Maven简介
   课时3 RESTful API的Hello world
   课时4 一个简单的RESTful API
章节2 RestController详解
   课时5 Spring Boot项目开发过程中的Hot Swapping(热部署)
   课时6 在程序中记录日志
   课时7 使用curl来测试API
   课时8 详解RestController中获取请求的各种数据
   课时9 RestController中的上传和下载示例
   课时10 在RestController中获取各种相关信息
   课时11 对客户端传入数据的校验
   课时12 深入学习Bean Validation
   课时13 Bean Validation 2.0中的约束用注解
章节3 在Spring Boot项目中使用Mybatis
   课时14 后端程序的层次结构
   课时15 不同层级之间的数据传输
   课时16 在Spring Boot项目中使用Mybatis
章节4 Spring Boot项目的单元测试
   课时17 使用spring-test和junit进行单元测试
   课时18 用mockito做桩模块来测试业务逻辑层
   课时19 用mockMvc来测试web控制层和业务逻辑层
章节5 在spring中管理数据库事务
   课时20 利用Transactional注解来管理事务
   课时21 Transactional注解的propagation参数详解
   课时22 Transactional注解的isolation参数详解
   课时23 Transactional注解的timeout参数详解
章节6 期中作业
   课时24 期中作业
   课时25 小测验
章节7 Mybatis进阶
   课时26 复杂类的ORMapping和主子表的同时数据插入
   课时27 使用TypeHandler处理枚举、数组和JSON类型
章节8 Spring Security
   课时28 Spring Security基础
   课时29 编写一个用Spring Security保护的RESTful API
   课时30 OAuth 2.0
章节9 Spring Async、Scheduling  & Cache
   课时31 用Spring Async编写异步执行的方法
   课时32 用Spring Scheduling处理需定时启动的任务
   课时33 通过Spring Cache实现程序中需要的缓存机制
   课时34 使用Redis缓存服务
章节10 Websocket & JMS
   课时35 在Spring项目中使用Websocket
   课时36 使用JMS进行异步数据通讯
章节11 部署Spring Boot项目
   课时37 Spring Profile和配置日志记录框架
   课时38 生产环境架构
章节12 杂项
   课时39 在Spring Boot项目中使用Servlet, Filter, Listener等
   课时40 Autowired的加载规则
   课时41 API的版本管理
   课时42 定制Spring REST的错误返回信息

SPRING INITIALIZR:
http://start.spring.io

RESTful概念已有文章如下:
https://blog.csdn.net/weixin_42915286/article/details/84880998

MAVEN:
https://blog.csdn.net/weixin_42915286/article/details/84105587

RESTful API URI 示例

URL:http://somehost/tvseries
GET /tvseries 获取电视剧列表
POST /tvseries 创建一个新电视剧
GET /tvseries/101 获取编号为101的电视剧信息
PUT /tvseries/101 修改编号为101的电视剧信息
DELETE /tvseries/101 删除编号为101的电视剧
GET /tvseries/101/characters 获取编号为101的电视剧的人物列表

POST /authorization 登录
DELETE /authorization 退出

在http://start.spring.io中创建REST依赖框架:
在这里插入图片描述

下好后,导入IDE中:
导入时的路径记得不要随便放在桌面还是其他地方,放在正式仓库文件夹为好;
比如放在桌面导入,系统配置会全部在桌面上。

在这里插入图片描述

初始化界面
在这里插入图片描述

章节1 开始一个最简单的RESTful API项目

课时3 RESTful API的Hello world

为求方便,把TutorialApplication改名为Application;
tutorial文件夹下新建TvSeriesController
写一个最简单的Controller

package cn.devmgr.tutorial;

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

import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("/tvseries")
public class TvSeriesController {
    @GetMapping
    public Map<String,Object> sayHello(){
        Map<String,Object> result=new HashMap<>();
        result.put("message","hello,world.");
        return result;
    }
}

在这里插入图片描述

可以直接在IDE里RUN
浏览器可查看 localhost:8080/tvseries
页面自动生成了JSON,写着{“message”:“hello,world”}

也可以在Terminal中RUN:进入POM的根目录下,mvn spring-boot:run

—————————————————
课4:
搞个电视剧的例子:
在src/main/java…/java 下新建:TVSeriesDto.java
private id; private name; private int seasonCount; private Date originRelease;(引入)
为了后面的测试,再加一个无参函数和有参函数

    public TvSeriesDto(){

    }
    public TvSeriesDto(int id,int name,int seasonCount,int originRelease){
      this.id=id;
      this name=name;
      this seasonCount=seasonCount;
      this originRelease=originRelease;
    }

生成Setter/Getter方法

返回TvSeriesController,把
public Map<String,Object> sayHello()方法改成getAll()方法

   public List<TcSeriesDto> getAll() //因为需要返回所有电视剧,下面只返回一部电视剧:西部世界
   List<TvSeriesDto> list=new ArrayList<>(); (引入)
   list.add(new TvSeriesDto(1,"WestWorld",1,calendar.getTime()));
   Calendar calendar=Calendar.getInstance();
   calendar.set(2016,Calendar.OCTOBER,2,0,0);
   return list;

这里暂时不说怎么从数据库查询,后面再说。
完成后同样可以在浏览器检查 localhost:8080/tvseries
若时间显示有问题,可能是时区原因;
有种方法:写时间戳Timestamp,较灵活(前端控制)

注:日期类型转JSON格式,可以在属性上增加:
1.设置时区和格式;2.设置shape的long型格式
即:
@JsonFormat(timezone="GMT+8",pattern="yyyy-MM-dd")

@JsonFormat(shape=JsonFormat.Shape.NUMBER)
这两个方法需要在每一个日期型的属性前都添加,较麻烦,推荐下面方法:

全局修改可以在application.yml

spring:
  jackson:
    date-format: yyyy-MM-dd # 用字符串型表示,用这里设置格式;若设置字符串类型,下面的时间戳应该不写或者设置false
    timezone: GMT+8
    serialization: 
      write-dates-as-timestamps: true # 时间戳:true;若时间戳和字符型并存,时间戳优先

BEFORE:

"originRelease": "2016-10-01T16:00:21.816+0000"

AFTER timeStamps:

"originRelease": 1475337601927

AFTER 字符串:

"originRelease": "2016-10-02"

——————————————

章节2 RestController详解

Controller里添加一部电视剧先:

calendar.set(2011,Calendar.SEPTEMBER,1,2,0,0);
        list.add(new TvSeriesDto(1,"Person of Interest",5,calendar.getTime()));

课5: HOT Swapping 热部署
(热部署设置介绍在本blog之IDEA设置文章)
每次修改了项目,要看结果要重新启动ctrl+C,比较麻烦
Spring中提供了hot swapping

1.在POM里输入devtools依赖包

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>

2.添加配置文件:配置文件中显示指定,默认值也是true,但是防止其他地方修改了默认值,所以,建议添加这个配置信息。
「.properties与.yml格式的区别详见本blog之Spring文章。」

「Application.yml格式」:

spring:
  devtools:
    restart:
      enabled: true
「Application.properties格式」:

spring.devtools.restart.enabled=true
spring.devtools.restart.additional-paths=src/main/java
spring.devtools.restart.exclude=WEB-INF/**

3.此方法是基于类加载机制来实现热加载的,因此你修改完成代码后必须重新编译当前代码,才能触发热部署,Eclipse默认就支持了自动编译,而在Intellij IDEA中默认是关闭了自动编译的,要按照如下几步设置开启:

  • 1.IDEA开启项目自动编译,进入设置,Build,Execut, Deployment -> Compiler 勾选中左侧的Build Project automatically

  • 2.IDEA开启项目运行时自动make, command + shift + a搜索命令:registry -> 勾选compiler.automake.allow.when.app.running

    再试试启动,浏览器看看
    我自己用以上方法操作后可以生效,只是反应速度比较迟缓。

PS:
JRebel激活 https://www.cnblogs.com/zhengsc/p/8494066.html
在这里插入图片描述

在这里插入图片描述
——————————————————

课6: 在程序中记录日志

日志可以设置级别:
使用System.out.println操作时很局限,因为他不能设置级别,各种环境下都会输出全部语句,调试时还要删掉多余语句;使用日志则无需删除,只需调整级别。

指定级别后,运行时借用一个「输出配置文件」可以把某个级别以及之上的级别都记录下来。比如生产环境中,我们把日志级别调高一些「WARN」,那么TRACE、DEBUG那些就不会被记录。

  • 1.两种方法(依赖包) (1).Common-logging (2).SLF4j
    他们都用得很广,特性相似
  • 2.日志级别:
    Common-logging分成6级:
    TRACE<DEBUG<INFO<WARN<ERROR<FATAL
    SLF4j和一般的日志分成(中间)4个级:
    DEBUG INFO WARN ERROR

「输出配置文件」:在application.yml中配置
logging: file:target/app.log level: ROOT:WARN cn.devmgr:TRACE //包名自行修改
举例:commons-logging

import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory;

/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值