zoukankan      html  css  js  c++  java
  • Spring Boot简明教程之实现Web开发及常用参数获取方式分析

    Spring Boot简明教程之实现Web开发及常用参数获取方式分析

    在前面的文章中,我们已经大致介绍了有关Spring Boot的项目配置等信息,我们也体会到了Spring Boot对于Web开发的支持。在这篇文章中,我们将介绍Spring Boot对于Web开发的支持:

    Controller的使用

    在MVC类型的项目开发中,控制器(Controller)是十分重要的一个环节,其中,最重要的就是下面四个注解:

    注解 解释
    @Controller 处理请求
    @ResponseBody 将返回的数据转换为 JSON 格式
    @RestController @RestController=@Controller+@ResponseBody
    @RequestMapping 配置URL映射

    请求处理:@RestController

    控制器(Controller)是MVC架构中最重要的一环,同时JSON对于前后端分离的项目中,前后端数据交流的重要传输方式,对于这二者的支持,对于Web开发来说是十分重要的。我们都知道@Controller用于处理http请求,而@ResponseBody是将数据转换为JSON数据,而@RestController就更像是两者的结合。

    例如:

    @RestController
    public class HelloController {
        @RequestMapping("/hello")
        public String hello(){
            return "hello";
        }
    }
    

    我们在浏览器输入:http://localhost:8080/hello

    在这里插入图片描述
    成功访问,但是如果我们将@RestController更改为@Controller,就会发现:访问报错,大概意思就是我们缺少视图的访问模板,这是因为@Controller更多时候是搭配着视图模板进行使用(这点我们会在后面进行详细的介绍)

    @Controller
    public class HelloController {
        @RequestMapping("/hello")
        public String hello(){
            return "hello";
        }
    }
    

    在这里插入图片描述

    当我们加上@ResponseBody后,访问又再次成功。

    @Controller
    @ResponseBody
    public class HelloController {
        @RequestMapping("/hello")
        public String hello(){
            return "hello";
        }
    }
    

    这就是证明了:@RestController=@Controller+@ResponseBody。

    当我们进入@RestController源码查看时,发现:再次印证了这一点

    在这里插入图片描述


    路由设置:@RequestMapping

    【@RequestMapping】 用于配置URL映射,即可配置与类,也可以配置与方法。配置于类表示该类访问的父路径,配置于方法则表示该方法的实际映射地址。

    该注解有三个常用的属性:value、method 和 produces。

    属性 说明
    value 指定请求的实际地址,可以省略不写
    method 指定请求的类型,默认为 GET
    produces 指定返回内容类型,如 produces = "application/json; charset=UTF-8"

    例如,我们将之前的HelloController更改为:

    @RestController
    @RequestMapping(value = "/test")
    public class HelloController {
    
        @RequestMapping(value = "/hello")
        public String hello(){
            return "hello";
        }
    }
    

    我们就发现,访问的地址已经变成了:http://localhost:8080/test/hello

    在这里插入图片描述

    如果我们想让多个URL能访问同一个方法,应该怎么做呢?

    @RestController
    @RequestMapping(value = "/test")
    public class HelloController {
        @RequestMapping(value = {"/hello","hello2"})
        public String hello(){
            return "hello";
        }
    }
    

    我们就发现:地址变成了一个数组,只要是这个数组内的url均能访问该方法。

    在这里插入图片描述

    如果我们想指定访问的方法:

    @RestController
    @RequestMapping(value = "/test")
    public class HelloController {
    
        @RequestMapping(value = "/hello" ,method = RequestMethod.POST)
        public String hello(){
            return "hello";
        }
    }
    

    再次启动,我们就发现:访问方法被限制为【POST】

    在这里插入图片描述

    如果我们再在浏览器输入:http://localhost:8080/test/hello访问,就会被拒绝:

    在这里插入图片描述

    除此之外呢,还有更加简便的方式来实现请求方式的限制:

    注释 解释
    @DeleteMapping DELETE方法
    @GetMapping GET方法
    @PutMapping PUT方法
    @PostMapping POST方法

    例如:

    @RestController
    @RequestMapping(value = "/test")
    public class HelloController {
    
    //    @RequestMapping(value = "/hello" ,method = RequestMethod.GET,produces = "application/json; charset=UTF-8")
        @GetMapping("/hello")
        public String hello(){
            return "hello";
        }
    }
    

    启动:效果和 @RequestMapping一样,而且更加简洁。

    在这里插入图片描述


    参数获取

    对于参数获取,主要使用的是下面三个注解:

    注解 说明
    @PathVariable 获取 URL 参数
    @RequestParam 从 Request 里获取参数值
    @RequestBody 获取JSON实体

    @PathVariable

    使用@PathVariable获取参数,更多的是针对http://localhost:8080/test/hello/{phone}这类动态参数,例如:

    @RestController
    @RequestMapping(value = "/test")
    
    public class HelloController {
    
        @RequestMapping(value = "/hello/{phone}")
        public Integer phone(@PathVariable Integer phone ){
            return phone;
        }
    }
    

    启动项目,并在浏览器输入:http://localhost:8080/test/hello/546

    在这里插入图片描述

    如果有多个动态参数:

    @RestController
    @RequestMapping(value = "/test")
    
    public class HelloController {
    
        @RequestMapping(value = "/hello/{phone}/{name}")
        public String phone(@PathVariable Integer phone,@PathVariable String name){
            return "电话:"+ phone +"
    "+ "姓名: " + name;
        }
    }
    

    启动项目,在浏览器输入:http://localhost:8080/test/hello/546/name

    在这里插入图片描述

    这样就获取了多个参数,但是需要注意的是: URL 中的参数和方法中的参数名需要保持一致。如果不同,那么就需要指定URL中的参数名来获取,例如:

    @RestController
    @RequestMapping(value = "/test")
    public class HelloController {
    
        @RequestMapping(value = "/hello/{phone}/{name}")
        public String phone(@PathVariable(value = "phone") Integer myPhone,@PathVariable String name){
            return "电话:"+ myPhone +"
    "+ "姓名: " + name;
        }
    }
    

    这里就不再展示运行结果。

    @RequestParam

    @RequestParam获取参数主要针对URL为:http://localhost:8080/test/hello/?phone=456

    例如:

    @RestController
    @RequestMapping(value = "/test")
    
    public class HelloController {
    
        @RequestMapping(value = "/hello")
        public Integer phone(@RequestParam Integer phone){
            return phone;
        }
    }
    
    

    启动项目,输入:http://localhost:8080/test/hello/?phone=456

    在这里插入图片描述

    但需要注意的是,如果URL 中的参数和方法中的参数名不一致,仍然需要指定参数名,例如:

    @RestController
    @RequestMapping(value = "/test")
    
    public class HelloController {
        @RequestMapping(value = "/hello")
        public Integer phone(@RequestParam(value = "phone") Integer myPhone){
            return myPhone;
        }
    }
    

    这里就不再演示运行结果。同时@RequestParam还有两个常用的属性:

    属性 说明
    required 参数是否为必须,True 表示为必须;
    defaultValue 默认值,当获取到的参数为Null时使用

    例如:

    @RestController
    @RequestMapping(value = "/test")
    
    public class HelloController {
        @RequestMapping(value = "/hello")
        public Integer phone(@RequestParam(value = "phone",required = false,defaultValue = "139") Integer myPhone){
            return myPhone;
        }
    }
    

    启动项目,浏览器输入:http://localhost:8080/test/hello/

    在这里插入图片描述

    我们发现,当我们为传值时,返回的我们设置的默认值:139。

    @RequestBody

    @RequestBody主要用来获取前端传来的封装好的Json格式的参数。

    例如:

    @RestController
    @RequestMapping(value = "/test")
    
    public class HelloController {
    
        @RequestMapping(value = "/hello",method = RequestMethod.POST)
        public String hello( @RequestBody String str){
            return str;
        }
    }
    

    然后,我们使用Postman进行Post请求测试(因为浏览器不方便对Post请求进行测试,Postman是后端开发中比较常用的接口测试工具,官网地址

    在这里插入图片描述


    Json的使用

    我们在上文提到过,@RestController可以将返回参数转为Json格式。那么我们现在就来感受下Spring Boot对于Json的支持。

    实体类

    创建如下的目录结构

    在这里插入图片描述

    其中,Person类为:

    package cn.newtol.springboot05.entity;
    
    /**
     * @Author: REN
     * @Description:
     * @Date: Created in 20:10 2018/9/17
     */
    
    public class Person {
        private String name;
        private Integer phone;
    
        public Person(String name, Integer phone) {
            this.name = name;
            this.phone = phone;
        }
        ...
        /* 省略get、set方法 */
    	
    }
    
    

    HelloController为:

    @RestController
    @RequestMapping(value = "/test")
    
    public class HelloController {
    
        @RequestMapping(value = "/person",method = RequestMethod.GET)
        public Person person(){
            Person person = new Person("ABC",456);
            return person;
        }
    }
    

    启动项目,浏览器输入:http://localhost:8080/test/person

    在这里插入图片描述

    List

    将HelloController改为:

    @RestController
    @RequestMapping(value = "/test")
    
    public class HelloController {
    
        @RequestMapping(value = "/list",method = RequestMethod.GET)
        public List<String> list(){
            List<String> lists = new ArrayList<>();
            lists.add("abc");
            lists.add("cdf");
            return lists;
        }
    }
    

    启动项目,浏览器输入:http://localhost:8080/test/list

    在这里插入图片描述
    我们就成功的将List转换为了Json格式,对于其他的数据类型,我们就不再进行演示,有兴趣的小伙伴可以自行进行测试。

    总结

    我们主要介绍了Spring Boot对于Web开发的一些支持,其中主要介绍了:@RestController 、 @RequestMapping、@PathVariable 、@RequestParam 、@RequestBody五个注解,以及演示了一下Spring Boot对于Json的支持。

    源码地址

    源码地址

    关注博主的个人公众号,有更多视频学习资源分享~
  • 相关阅读:
    动态、指针field-symbols初探
    简单的OO ALV显示ALV及下载
    python运算符号
    linux ubuntu 学习总结(day01)基本命令学习
    Linux之Ubuntu基本命令提炼,分条列出
    linux常用基本命令
    EMC光纤交换机故障处理和命令分析
    Java求一个数组中的最大值和最小值
    【SSH网上商城项目实战30】项目总结
    【SSH网上商城项目实战29】使用JsChart技术在后台显示商品销售报表
  • 原文地址:https://www.cnblogs.com/newtol/p/10159083.html
Copyright © 2011-2022 走看看