SpringBoot入门学习笔记-2-controller使用

本章摘要:本章重点介绍springboot中controller的使用。

上一篇:SpringBoot入门学习笔记-1-idea创建springboot项目_Bill老罗的博客-CSDN博客

现在Java多数人都用来写JavaWeb了,所以Controller变成很常用,也是最基础的必备技术,掌握了Controller的使用,就可以写对外接口了,进行SpringBoot的简单体验。

目录

一、@Controller与@RestController用法和区别

二、类文件外面添加 RequestMapping,相当于添加了一级路由,类里面的是二级路由。

 三、GET请求与传参

1、定义GET请求类型

2、请求参数,可以通过path或问号传参。

3、设置非必填参数

4、返回参数

四、POST请求与传参

1、定义POST请求类型

2、请求参数

 form-data以健值对的方式传参(完整描述是multipart/form-data)

 application/x-www-form-urlencoded也是键值对方式传参,多了转码处理。

具体差异网上很多介绍,这里说一下x-www-form-urlencoded与form-data差异重点:

form-data除了传数据外,一般用来传送文件。postman也能看出来:

 application/json是前后端交互的主流数据格式。

POST请求类型为JSON时,我们一般会用Map或JSONOBJECT或JavaBean来接收。

 3、返回参数


一、@Controller与@RestController用法和区别

@RestController Spring4之后新加的注解,以前返回json
需要@ResponseBody配合@Controller来使用,现在只需要一个@RestController即可

2510cda8dc37474081fc159eae25ff48.png

 可以看到都能实现相同的效果。

40d353229ba242fd8fb67481da003593.png

 那有什么区别呢?

@RestController只能返回json格式的数据。不能返回文件。比如我要返回html\jsp\xml等文件,那就要使用@Controller配合视图解析器InternalResourceViewResolver才行。

比如,我在resources/static下面新建一个1.html文件,那么我就可以在控制层返回它:

1ef205021e904eed961a47512a56d054.png

 注:当然,在static文件夹下,是可以直接localhost:8080/1.html访问的,这里只是为了演示Controller用途,生产中是可以把需要返回的文件放在非static文件夹的。

重点:@RestController = @Controller +@ResponseBody。@Controller注解可以返回文件。

二、类文件外面添加 RequestMapping,相当于添加了一级路由,类里面的是二级路由。

c8d810846a96404a813e822b52441880.png

 三、GET请求与传参

@RequestMapping 定义的接口,是不限定GET\POST的,所以都可以访问。

1、定义GET请求类型

可通过在RequestMapping中,通过method参数指定或直接用GetMapping指定。

@RestController
@RequestMapping("/get")
public class Get {

    @RequestMapping(value = "/type1",method = RequestMethod.GET)
    public String get1(){
        return "RequestMapping with method=GET";
    }

    @GetMapping("/type2")
    public String get2(){
        return "GetMapping with method=GET";
    }
}

2、请求参数,可以通过path或问号传参。

   @GetMapping("/{id}/set")
    public String get3(@PathVariable String id){
        // @PathVariable定义路径参数,并在Mapping中{id}定义参数位置
        return "path args " + id;
    }
    @GetMapping("/set")
    public String get4(@RequestParam String key,@RequestParam String value){
        // @RequestParam 定义参数
        return "path args " + key +":"+value;
    }

5fa60c547ce4405c910196932c2274f6.png

3、设置非必填参数

通过设置required =false来实现

   @GetMapping("/set")
    public String get4(@RequestParam(required = false)String key,@RequestParam String value){
        // @RequestParam 定义参数
        return "path args " + key +":"+value;
    }

4、返回参数

方法前面的返回值类型就是接口的返回值类型。如上面我们都是返回String类型。

如果返回值类型比较复杂,可以用javaBean或Map类型,比如HashMap.

   @GetMapping("/map")
    public HashMap get5(){
        // @RequestParam 定义参数
        HashMap map = new HashMap<>();
        map.put("aa","aa1");
        map.put("bb","bb1");
        return map;
    }

664cf387aa8847898e75e79b98d6a6f0.png

 注:生产中可能bean、jo对象更常见。

四、POST请求与传参

@RequestMapping 定义的接口,是不限定GET\POST的,所以都可以访问。

1、定义POST请求类型

可通过在RequestMapping中,通过method参数指定。或用PostMapping指定。

    @RequestMapping(value = "/1",method = RequestMethod.POST)
    public String p1(){
        return "OK";
    }

    @PostMapping("/2")
    public String p2(){
        return "OK";
    }

2、请求参数

GET请求中的传参方式都支持。同时增加了Body传参。

    // @PathVariable 和 @RequestParam都支持
    @PostMapping("/{id}/set")
    public String post1(@PathVariable String id){
        // @PathVariable定义路径参数,并在Mapping中{id}定义参数位置
        return "path args " + id;
    }
    @PostMapping("/set")
    public String post2(@RequestParam(required = false)String key,@RequestParam String value){
        // @RequestParam 定义参数
        return "path args " + key +":"+value;
    }

然后,我们看到问号传参,其实就是Params传参,一般我们也称为url传参。

8c1535e7c9ee4d548315c6362cbb6320.png

 Body传参时,都有哪些类型呢?常见的有form-data,x-www-form-urlencoded,json854bbc64bf894868912f5a20fb1171a2.png

c6216bb5b9ab4cdd83742ea931bea3b8.png

 form-data以健值对的方式传参(完整描述是multipart/form-data)

    @PostMapping("/form")
    public HashMap post3(@RequestParam String key,@RequestParam String value){
        // @RequestParam 定义参数
        HashMap map = new HashMap<>();
        map.put("key",key);
        map.put("value",value);
        return map;
    }

上图代码示例中,接口/form中接收两个参数。分别是key\value,分别放在问号传参和form-data传参,发现都可以被@RequestParam参数接收。

a8d571763b3f42bebda7dee62106b591.png

 application/x-www-form-urlencoded也是键值对方式传参,多了转码处理。

是POST表单提交的默认方式(如果不指定),看起来效果和form-data差不多。

5ed4fff97aea48b595268cfad1f34fed.png

具体差异网上很多介绍,这里说一下x-www-form-urlencoded与form-data差异重点:

x-www-form-urlencoded是POST表单提交的时默认格式,传数据时相对form-data是对中文字符等进行了转码处理,比如url转码后变成这样格式的controller%2520post%2520%25E4%,好处是不会乱码。

form-data除了传数据外,一般用来传送文件。postman也能看出来:

e9724442a2eb4574ba315de39f03f79d.png

 application/json是前后端交互的主流数据格式。

Controller会把Body中所有的数据,都做为一个@RequestBody 入参处理。

    @PostMapping("/json")
    public HashMap post4(@RequestBody String key){
        // @RequestParam 定义参数
        HashMap map = new HashMap<>();
        map.put("key",key);

        return map;
    }

0fba5ce280744de18d96e2d0f3b3c897.png

 即然入参是一个JSON,那么我也用JSON来接收,是不是就不用转化了?

POST请求类型为JSON时,我们一般会用Map或JSONOBJECT或JavaBean来接收。

    @PostMapping("/map")
    public HashMap post4(@RequestBody HashMap map){
        // @RequestParam 定义参数
        return map;
    }

94291d8381b64c42b8ba101887a150c4.png

 3、返回参数

和GET方法一样,没有区别。一般都会有统一的returnObj返回。比如返回一个JsonObject,格式如下:{“code”:1000,msg:"OK",data:111111}。

或者用status代替code,表达请求成功还是失败。data里放业务逻辑加工后的返回结果数据。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值