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 +"\n"+ "姓名: " + 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 +"\n"+ "姓名: " + 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的支持。

源码地址

源码地址

关注博主的个人公众号,有更多视频学习资源分享~
posted @ 2018-09-17 21:04  Newtol  阅读(275)  评论(0编辑  收藏  举报