Spring Boot中的MVC支持

Spring Boot中的MVC支持

Spring Boot 的 MVC 支持@RestController、@RequestMapping、@PathVariable、@RequestParam以及 @RequestBody等注解。

1. @RestController

@RestController注解包含了原来的@Controller 和@RespnseBody注解。

@Controller标识类为 Spring MVC控制器组件,用于处理用户请求;

@ResponseBody注解是将返回的数据结构转换为 Json 格式。

注意:如果是前后端分离,不用模板渲染的话,比如 Thymeleaf,这种情况下是可以直接使用@RestController 将数据以 json 格式传给前端,前端拿到之后解析;但如果不是前后端分离,需要使用模板来渲染的话,一般 Controller 中都会返回到具体的页面,那么此时就不能使用@RestController了,比如:

public String getTest() {
    return "Hello,World!";
}

2. @RequestMapping

@RequestMapping 是一个用来处理请求地址映射的注解,它可以用于类上,也可以用于方法上。在类的级别上的注解会将一个特定请求或者请求模式映射到一个控制器之上,表示类中的所有响应请求的方法都是以该地址作为父路径;在方法的级别表示进一步指定到处理方法的映射关系。

该注解有6个属性,一般在项目中比较常用的有三个属性:value、method 和 produces。

属性用法
value指定请求的实际地址,value 可以省略不写
method主要有 GET、PUT、POST、DELETE,默认为 GET指定请求的实际地址
producesproduces = “application/json; charset=UTF-8”

案例:

@RestController
@RequestMapping(value = "/test", produces = "application/json; charset=UTF-8")
public class TestController {
    
@RequestMapping(value = "/list", method = RequestMethod.GET)
public String getTestList() {
    return "Hello,World!";
    }
}

针对Get、PUT 、POST 和 DELETE 四种不同的请求方式,是有相应注解的,不用每次在 @RequestMapping 注解中加 method 属性来指定,上面的 GET 方式请求可以直接使用 @GetMapping("/list") 注解,效果一样。相应地,另外三种请求方式对应的注解分别为 @PutMapping、@PostMapping 和 DeleteMapping。

3. @PathVariable

@PathVariable是从 url 模板中获取参数值, 即这种风格的 url:http://localhost:8080/test/{id}

@PathVariable 注解主要是用来获取 url 参数,Spring Boot 支持 restfull 风格的 url,比如一个 GET 请求携带一个参数 id 过来,可以使用@PathVariable注解接收参数id 。

@GetMapping("/test/{id}")
public String getTestList(@PathVariable Integer id) {
    System.out.println("接收到的id值为:" + id);
    return "Hello,World!";
}

如果想要 url 中占位符中的 id 值直接赋值到参数 id 中,需要保证 url 中的参数和方法接收参数一致,否则就无法接收。如果不一致的话,需要用 @PathVariable 中的 value 属性来指定对应关系。

@RequestMapping("/test/{idm}")
public String getTestList(@PathVariable(value = "idm") Integer id) {
    System.out.println("id的值为:" + id);
    return "Hello,World!";
}

对于访问的 url,占位符的位置可以在任何位置,不一定非要在最后,比如这样也行:/xxx/{id}/user。另外,url 也支持多个占位符,方法参数使用同样数量的参数来接收

@GetMapping("/test/{idm}/{name}")
    public String getTestList(@PathVariable(value = "idm") Integer id, @PathVariable String name) {
        System.out.println("id为:" + id);
        System.out.println("name为:" + name);
        return "Hello,World!";
  }

4. @RequestParam

@RequestParam 注解也是用于获取请求参数的。

@RequestParam 是从 request 里面获取参数值,即这种风格的 url:http://localhost:8080/test?id=1

@RequestMapping("/test")
public String getTestList(@RequestParam(value = "idm", required = false) Integer id) {
    System.out.println("id为:" + id);
    return "Hello,World!";
}

同理,url 上面的参数和方法的参数需要一致,如果不一致,也需要使用 value 属性来说明,例如:http://localhost:8080/user?idd=1

除了 value 属性外,还有个两个属性比较常用:

  • required 属性:true 表示该参数必须要传,否则就会报 404 错误,false 表示可有可无。

  • defaultValue 属性:默认值,表示如果请求中没有同名参数时的默认值。

@RequestParam 注解用于 GET 请求上时,接收拼接在 url 中的参数。除此之外,该注解还可以用于 POST 请求,接收前端表单提交的参数,假如前端通过表单提交 username 和 password 两个参数,那我们可以使用 @RequestParam 来接收,用法和上面一样。

@PostMapping("/form1")
    public String testForm(@RequestParam String username, @RequestParam String password) {
        System.out.println("获取到的username为:" + username);
        System.out.println("获取到的password为:" + password);
        return "success";
    }

如果表单数据很多,我们需要封装一个实体类来接收这些参数,实体中的属性名和表单中的参数名一致即可。使用实体接收的话,我们不能在前面加 @RequestParam注解了,直接使用即可。

@PostMapping("/form2")
    public String testForm(User user) {
        System.out.println("获取到的username为:" + user.getUsername());
        System.out.println("获取到的password为:" + user.getPassword());
        return "success";
    }

5. @RequestBody

@RequestBody 注解用于接收前端传来的实体,接收参数也是对应的实体,比如前端通过 json 提交传来两个参数 username 和 password,此时我们需要在后端封装一个实体来接收。在传递的参数比较多的情况下,使用 @RequestBody 接收会非常方便。

@PostMapping("/user")
public String testRequestBody(@RequestBody User user) {
    System.out.println("获取到的username为:" + user.getUsername());
    System.out.println("获取到的password为:" + user.getPassword());
    return "success";
}

@RequestBody注解用于 POST 请求上,接收 json 实体参数。它和上面我们介绍的表单提交有点类似,只不过参数的格式不同,一个是 json 实体,一个是表单提交。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ctrl+c程序猿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值