一起学Springboot -- 第三节 应用入口Controller的使用


本节需求:外部通过url与服务端进行数据交互。

本节demo 在项目中的demo01下

Controller 是程序与外界沟通的入口,学会Controller 相关知识,主要是一些注解的使用是必备的基础知识,这节课就让我们来了解和使用Controller及其相关注释。

  • @Controller

在上一节课的基础上,新建一个类 HelloController ,并且在类上和方法上写上相应的注解,如下:

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

然后重新启动工程,然后访问,http://localhost:8080/hello ,不出意外将会返回 Hello Controller。这部分都是依赖于注解来运行的,这里我们着重讲什么去使用,暂不去理会背后的原理,会用了才能谈上其他的。接下来我们就一起看下一些常用的注解。

  1. @Controller 标明这个类是一个控制器,是交互的入口,默认返回view对象,在此先不考虑view对象的情况。
  2. @RestController 标明此Controller 提供RestAPI(没有ResrAPI 概念的在这可直接理解成返回json的数据格式),此注解是Spring4 之后添加的
  3. @ResponseBody 标明该请求返回的数据格式指定为json字符串。
  4. 以上三者之间的关系 @Controller 默认返回view类型,和 @ResponseBody 配合使用可返回json,相当于 @ResponseBody + @Controller = @RestController
  5. @RequestMapping 及其变体 映射http请求到java的方法, 常用的变体有GetMapping、PostMapping、PutMapping、DeleteMapping,分别代表查、增、改和删四种操作,不常用的有HeadMapping、OptionsMapping和PatchMapping。
  6. @RequstParam 映射请求参数到java 方法的参数,通常用于get请求中url 携带的参数。
  7. @PathVariable 映射url片段到java方法的参数
  • @RestController

@RestController = @ResponseBody + @Controller;对比上个示例即可看出区别

@RestController
public class HelloController {
   @GetMapping("/hello")
   public String say() {
       return "Hello RestController";
   }
}
  • @RequestMapping 及其变体

  1. 配置url 的映射,如果不指定请求方法,默认此注解包含了所有注解,基本用法如下:
@RestController
public class HelloController {
   //指定请求方式为Get请求:method = RequestMethod.GET,如果不指定请求方法,那所有的请求方法都可以调用。
   @RequestMapping(name = "/hello", method = RequestMethod.GET)
   public String hello() {
       return "Hello RequestMapping";
   }
   //与上面的方法等价,通常都是用下面这种方式
   @GetMapping("/hello")
   public String say() {
       return "Hello GetMapping";
   }
}

RequestMapping 的变体使用XXXMapping即可

  1. RequestMapping 常用的方式,指定url共同的片段
    假设我现在设计的url 如下:
    http://localhost:8080/hello/say
    http://localhost:8080/hello/listen
    那我该怎么写呢?显然是可以这样写的
@RestController
public class HelloController {
    @GetMapping("/hello/say")
    public String say() {
        return "Hello say";
    }

    @GetMapping("/hello/listen")
    public String listen() {
        return "Hello listen";
    }
}

但是这样如果有很多个方法,导致不断重写“/hello”,如果要改也很麻烦。我们可以有更优雅的办法,如下:
在类上添加@RequestMapping("/hello"),效果是一样的

@RestController
@RequestMapping("/hello")
public class HelloController {

    @GetMapping("/say")
    public String say() {
        return "Hello say";
    }

    @GetMapping("/listen")
    public String listen() {
        return "Hello listen";
    }
}
  1. 同一个方法映射多个url 地址
    假设我现在设计的url 如下,因为一个类中方法名不能重名,那是不是意味着要写两个方法来映射不同的url,显然这是不可取的。
    http://localhost:8080/hello/say
    http://localhost:8080/hi/say
    在 RequestMapping 配置多个不同的url片段即可
@RestController
@RequestMapping({"/hello","/hi"})
public class HelloController {

    @GetMapping("/say")
    public String say() {
        return "Hello";
    }
}

@GetMapping、@PostMapping 等变体类似于@RequestMapping的用法,都是配置url的映射,不同在于@GetMapping、@PostMapping 这些只能用于方法上,不能用于类上,@RequestMapping即可用于类上,也可以用于方法上。
如果@RequestMapping 不指定请求的方法等同于包含了@GetMapping、@PostMapping 等所以这些请求,也就是可以通过所有请求方法访问。通常来说需要明确指定那种方式访问。

  • @PathVariable

如果我们想把参数放到url上,如 http://localhost:8080/hello/say/1 ,最后的“1”是我们想要获取的参数,我们就可以通过@PathVariable注解来获取。

@RestController
@RequestMapping("/hello")
public class HelloController {

    @GetMapping("/say/{id}")
    public String say(@PathVariable("id") Integer myId) {
        return "hello,my id is " + myId;
    }
}

这样我们就能够获取url中携带的参数了。
其格式为:{id},id为对应url中的参数值,@PathVariable(“id”) 中的“id”务必与url 映射的片段一致。
请求结果如下: hello,my id is 1

  • @RequestParam

获取请求参数的值。对于get请求来说,除了通过以上的方式获取参数外,还有另一种方式,一般的结构如下,地址和参数之间以“?”分隔,后面是参数,参数之间以&符号分隔如:http://localhost:8080/hello/say?username=lili&age=18 此时想获取该参username 和age 惨数,需要用到@RequestParam

@RestController
@RequestMapping("/hello")
public class HelloController {

    @GetMapping("/say")
    public String say(@RequestParam("username") String mUsername,@RequestParam("age") String mAge) {
        return "hello,my name is " + mUsername + ", I am " +mAge;
    }
}

此时如果不传该参数,将会报错找不到该资源。如果该参数可有可无,又该怎么处理,
我们只需要设置@RequestParam 的属性即可,例子如下:required 的默认值为true,表示该参数必须。

@RestController
@RequestMapping("/hello")
public class HelloController {

    @GetMapping("/say")
    public String say(@RequestParam("username") String mUsername,@RequestParam("age",required = false,defaultValue = "18") String mAge) {
        return "hello,my name is " + mUsername + ", I am " +mAge;
    }
}
  • POST方式参数的获取

post 请求可以有多种方式获取,可以通过Map的形式,也可以通过json 对象形式,这里我们通过json方式示例,请求方将参数放在请求体中以application/json的形式发送。content-type:application/json

	@PostMapping("/save")
    public User saveUser(@RequestBody User user) {
        System.out.println("username:"+user.getUserName +", age:"+user.getAge);
        return user;
    }

User是一个实体对象,将参数封装起来

public class User {
    private String username; 
    private Integer age; 
    //省略get/set
}

总结

  1. @Controller: 处理http请求,默认返回view,配合@ResponseBody使用返回json字符串;
  2. @RestController: @RestController=@Controller+@ResponseBody,返回json 字符串;
  3. @RequestMapping 配置url映射,即可作用于类上,也可以作用于方法上,如果不指定请求方法,将包含所有变体。
  4. @GetMapping/PostMapping 等作用类似于@RequestMapping,但是只能作用于方法上
  5. @PathVariable 获取url中的数据
  6. @RequestParam 获取请求参数的值
  7. POST方式参数的获取
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot中使用Mybatis-Plus自动生成代码的步骤如下: 1. 首先,在pom.xml文件中添加Mybatis-Plus的依赖项。这包括mybatis-plus-generator、velocity-engine-core和lombok等依赖项。\[1\] 2. 创建一个Mapper接口,继承自BaseMapper,并指定实体类的泛型。在这个接口中,你可以定义自己的查询方法。\[3\] 3. 配置Mybatis-Plus的代码生成器。你可以使用代码生成器来生成Mapper、Model、Service和Controller层的代码。你可以使用代码或者Maven插件来快速生成代码。\[2\] 4. 运行代码生成器,生成所需的代码文件。 5. 在Spring Boot的配置文件中配置数据库连接信息和Mybatis-Plus的相关配置。 6. 在Service层中使用生成的Mapper接口进行数据库操作。 通过以上步骤,你可以在Spring Boot中使用Mybatis-Plus自动生成代码。这样可以大大减少手动编写重复的CRUD操作的工作量,并提高开发效率。 #### 引用[.reference_title] - *1* [SpringBoot中的自动代码生成 - 基于Mybatis-Plus](https://blog.csdn.net/Jalon2015/article/details/116026730)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [springboot整合mybatis-plus,代码自动生成](https://blog.csdn.net/qq_32784303/article/details/82964168)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值