第05章 SpringBoot Web开发(二)

序言

1.内容介绍

​ 本章介绍了SpringBoot控制器类型分类,对于路由的组成、作用进行了详细的描述,同时对于SpringBoot Controller如何实现参数传递进行了详细的说明和实现,为了实现轻量级的数据结果返回,本章引入了SpringBoot对于JSON的集成实现,对于定时任务的处理主要讲解了三种定时器进行实战操作演练。

2.理论目标

  • 了解Controller类型分类
  • 掌握SpringBoot路由分类
  • 掌握参数传递的常用方式
  • 了解JSON的数据结构
  • 掌握定时器的常用分类

3.实践目标

  • 熟练操作Controller分类,能根据实际业务情况使用@Controller、@RestController
  • 熟练进行各种参数传递,达到灵活接收客户端数据的目的
  • 熟练操作JSON 格式的返回,为前后端分离做铺垫
  • 熟练进行定时业务操作,为复杂的时间调度业务做准备

4.实践案例

  • SpringBoot路由实战
  • SpringBoot参数传递实战
  • SpringBoot集成fastjson,实现json数据格式传递
  • SpringBoot集成定时器,实现定时任务处理

5.内容目录

  • 1.SpringBoot Controller
  • 2.SpringBoot返回JSON
  • 3.SpringBoot集成定时器

第1节 SpringBoot Controller

1. Controller类型分类

  • Controller主要分为两类,一种是传统的Web Controller,另一种是REST类型的Controller
    • @Controller:通常是被使用服务于web 页面的。默认@Controller方法返回的是一个string 串,是表示要展示哪个模板页面。
    • @RestController:专门用在编写API的时候,主要用在返回JSON或者XML等数据格式。方法返回的是可以是一个对象,是一个可以被序列化的对象。

2. 路由详解

  • 路由指的是http method
  • 在SpringBoot中,http method可以被类似"Mapping"的格式来表示
    • @RequestMapping:RequestMethod,value
    • @GetMapping:等同于@RequestMapping(method = RequestMethod.GET)
    • @PostMapping:等同于@RequestMapping(method = RequestMethod.POST)
    • @PutMapping:等同于@RequestMapping(method = RequestMethod.PUT)
    • @DeleteMapping:等同于@RequestMapping(method = RequestMethod.DELETE)

3. SpringBoot路由实战

  • 编写HelloController.java

     

    @RestController @RequestMapping("/user") public class HelloController { @GetMapping(value = "/get") public String testGet(){ return "测试GetMapping...."; } @PostMapping(value = "/post") public String testPost(){ return "测试PostMapping....."; } @PutMapping(value = "/put") public String testPut(){ return "测试PutMapping....."; } @DeleteMapping(value = "/del") public String testDelete(){ return "测试DeleteMapping....."; } @PatchMapping (value = "/patch") public String testPatch(){ return "测试PatchMapping....."; } @RequestMapping (value = "/req",method = RequestMethod.GET) public String testRequest(){ return "测试RequestMapping....."; } }

  • 采用Postman进行API测试

    • 选择Http Method、输入url、输入参数,点击"Send",观察执行效果

4. 参数传递详解

  • @RequestParam:将请求参数绑定到你控制器的方法参数上
    • 语法:@RequestParam(value=”参数名”,required=”true/false”,defaultValue=" ")
    • value:参数名
    • required:是否包含该参数,默认为true,表示该请求路径中必须包含该参数,如果不包含就报错。
    • defaultValue:默认参数值,如果设置了该值,required=true将失效,自动为false,如果没有传该参数,就使用默认值
  • @PathVaraible:用来处理动态的URL,URL的值可以作为控制器中处理方法的参数
    • @PathVariable 映射 URL 绑定的占位符
    • 带占位符的 URL 是 Spring3.0 新增的功能,该功能在SpringMVC 向 REST 目标挺进发展过程中具有里程碑的意义
    • 通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中
      • URL 中的 {xxx} 占位符可以通过@PathVariable(“xxx“) 绑定到操作方法的入参中

5. SpringBoot参数传递实战

  • 编写ParamController.java

     

    @RestController @RequestMapping("/user") public class ParamController { //账户验证 @RequestMapping(value="/login",method=RequestMethod.POST) public String login(@RequestParam String loginId,@RequestParam String pwd){ return "接收的账号:"+loginId+",密码:"+pwd; } //根据姓氏查询用户列表信息 @RequestMapping(value="/query") public String queryUsers(@RequestParam(value="uname",required = false,defaultValue = "张") String userName){ return "参数:"+userName; } //根据id查询用户详情 @RequestMapping(value="/detail/{id}",method= RequestMethod.GET) public String queryDetail(@PathVariable String id){ return "接收到的参数是:"+id; } }

  • 采用Postman进行测试

6. 返回值详解

  • 返回页面模板
    • 注解采用@Controller
    • request method返回类型为String
  • 返回字符串数据
    • 注解采用@RestController
    • request method返回类型为String
  • 返回模板页面
    • 注解采用@Controller
    • request method返回类型为ModelAndView
  • 返回Json数据

7. 返回页面模板并传参

  • 编写ResponseController.java

     

    @Controller public class ResponseController { @RequestMapping(value="/query",method = RequestMethod.GET) public ModelAndView queryUser(ModelAndView mv){ List<UserInfo> userList = new ArrayList<UserInfo>(); userList.add(new UserInfo(1001,"admin")); userList.add(new UserInfo(1002,"jains")); userList.add(new UserInfo(1003,"tony")); //查询结果存储 mv.addObject("users",userList); // 封装结果视图 mv.setViewName("userList");//templates/userList.html return mv; } }

  • 在templates目录下创建userList.html页面

     

    <!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>用户列表查询</title> </head> <body> <ul> <li th:each="user : ${users}"> <span th:text="*{user.userId}"/>&nbsp; <span th:text="*{user.userName}"/> </li> </ul> </body> </html>

  • 执行程序,观察运行情况


第2节 SpringBoot返回JSON

1. JSON概述

  • JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。
  • 是存储和交换文本信息的语法,类似 XML。
  • JSON比 XML 更小、更快,更易解析。

2. JSON数据结构

  • JSON数据整体是键值对的集合,主要有两种格式
    • 对象

      • 对象是一个无序的“‘名称/值’对”集合
      • 一个对象以“{”(左括号)开始,“}”(右括号)结束
      • 每个“名称”后跟一个“:”(冒号)
      • “‘名称/值’ 对”之间使用“,”(逗号)分隔
      • 比如描述1个用户信息:{“name”:“张三”,“age”:20}
    • 数组

      • 数组是值(value)的有序集合
      • 一个数组以“[”(左中括号)开始,“]”(右中括号)结束
      • 值之间使用“,”(逗号)分隔
  • 比如描述多个用户信息
 

[ {"name":"张三","age":20}, {"name":"李四","age":22}, {"name":"王五","age":19} ]

3. SpringBoot返回Json方式

  • Jackson、fastjson区别
    • 上手难以程度:fastjson(容易)、Jackson(中等)
    • 高级特性支持:fastjson(中等)、Jackson(丰富)
    • 官方文档支持:fastjson(中文)、Jackson(英文)
    • 处理JSON速度:fastjson(略快)、Jackson(快)

4. SpringBoot集成fastjson

  • pom.xml引入library依赖

     

    <!--引入fastjson--> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.35</version> </dependency>

  • 编程JsonController.java

     

    @RestController @RequestMapping("/user") public class JsonController { @ResponseBody @RequestMapping(value="/queryAll",method = RequestMethod.GET) public String getData(){ //封装查询结果 Map<String,Object> map = new HashMap<String,Object>(); try{ map.put("status",200); //查询的用户列表数据 List<UserInfo> userList = new ArrayList<UserInfo>(); userList.add(new UserInfo(1001,"admin")); userList.add(new UserInfo(1002,"jains")); userList.add(new UserInfo(1003,"tony")); map.put("data",userList); }catch (Exception ex){ map.put("status",500); map.put("data",null); } return JSON.toJSONString(map); } }

  • 运行程序,观察执行效果

    • 输入url地址:http://localhost:8080/user/queryAll
  • 执行效果是:

 

{"data":[ {"userId":1001,"userName":"admin"}, {"userId":1002,"userName":"jains"}, {"userId":1003,"userName":"tony"}, ], "status":200 }

第3节 SpringBoot集成定时器

1. 实现定时器主要采用三种方式

  • TimerTask类提供的定时方法
  • Quartz定时器
  • Scheduled注解方式

2. TimerTask、Schedule、Quartz三者区

3. 定时器实战

  • 需求:每隔1秒显示当前服务器时间

  • TimerTask方式

 

//方式1:采用Timer方式 public static void testTimer(){ TimerTask task = new TimerTask() { @Override public void run() { System.out.println("当前时间是:"+TimeUtils.getNowTime()); } }; Timer timer = new Timer(); timer.schedule(task, 0, 1000); // 0标识 1000指延迟的时间1000毫秒 }

  • Quartz定时器方式

    • 引入依赖
     

    <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.2</version> </dependency>

    • 定义需要定时执行的方法类,实现Job接口
     

    public class MyJob implements Job { @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { // TODO Auto-generated method stub //需要定时执行的方法 System.out.println("当前的时间是:"+ TimeUtils.getNowTime()); } }

    • 调用Job,执行定时操作
     

    //方式2:采用Quartz public static void testQuartz()throws Exception{ // TODO Auto-generated method stub // 创建工作 JobDetail jobDetail = JobBuilder.newJob(MyJob.class) .withDescription("工作的描述") .withIdentity("工作的名称", "工作的组") .build(); // 创建触发器 Trigger trigger = TriggerBuilder.newTrigger() .withDescription("触发器的描述") .withIdentity("触发器的名称", "触发器的组") .withSchedule(CronScheduleBuilder.cronSchedule("0/1 * * * * ?")) .startAt(new Date())// 不设置,默认为当前时间 .build(); // 创建调度器,粘合工作和触发器 SchedulerFactory schedulerFactory = new StdSchedulerFactory(); Scheduler scheduler = schedulerFactory.getScheduler(); scheduler.scheduleJob(jobDetail, trigger); // 启动调度器 scheduler.start(); }

  • @Scheduled注解方式

    • 定义Scheduler类
     

    @Component public class Scheduler{ //每隔2秒执行一次 @Scheduled(fixedRate = 2000) public void testTasks() throws Exception{ System.out.println("定时任务执行时间:" + TimeUtils.getNowTime()); } //每天2:01执行 @Scheduled(cron = "0 01 02 ? * *") public void testTasks2() { System.out.println("定时任务执行时间:" + TimeUtils.getNowTime()); } }

    • 在启动类上加上@EnableScheduling注解
     

    @SpringBootApplication @EnableScheduling public class SpringbootWebApplication { public static void main(String[] args) { SpringApplication.run(SpringbootWebApplication.class, args); } }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

撸码的xiao摩羯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值