Spring MVC

Spring MVC框架的作用

Spring MVC框架主要解决了接收请求、响应结果的相关问题(其实,并没有关注MVC中的M)。

提示:MVC = Model + View + Controller,这是主流的开发项目的思想,它认为每个项目至少需要有这3个部分,才是一个完整的项目,其中,Controller是控制器,用于接收请求、响应结果,View是视图,早些年在不是前后端分离的项目中,服务器端在处理完请求后,应该向客户端响应某个页面,此页面就是视图,目前,主流的设计方案是前后端分离的,则服务器端不需要也不会处理视图,Model是数据模型,是一套相对固定的数据处理流程,在项目中表现为Service与Mapper。

Spring MVC框架的依赖项

当在项目中需要使用Spring框架时,需要添加spring-webmvc依赖项,例如:

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.20</version>
</dependency>

关于控制器

在Spring MVC框架中,添加了@Controller注解的类,才算是控制器类!例如:

@Controller
public class AdminController {
}

在控制器类中,可以添加处理请求的方法,并在方法上添加@RequestMapping系列注解来配置请求路径,例如:

@Controller
public class AdminController {
    @PostMapping("/delete")
    public String delete() {
        // 暂不关心方法体
    }
}

以上代码处理请求之后,将返回一个String类型的结果(以上方法的返回值是String),这个返回值表示的是“视图组件的名称”,接下来,会由Spring MVC框架的其它组件根据这个视图名称找到对应的视图组件(例如某个html页面),最后,会将此视图组件响应到客户端去!

在前后端分离的做法中,服务器端并不会处理视图,当处理完某个请求后,向客户端响应必要的数据即可,至于这些数据如何呈现出来,应该是由客户端软件负责的!

在处理请求的方法上添加@ResponseBody,则此方法的返回值就不再是视图组件的名称,而是要响应到客户端的数据!所以,此注解也称之为“响应正文”的注解,例如:

@Controller
public class AdminController {
    @PostMapping("/delete")
    @ResponseBody
    public String delete() {
        // 暂不关心方法体
    }
}

另外,也可以将此注解添加在控制器类上,则默认情况下,此类中所有处理请求的方法都将响应正文!例如:

@Controller
@ResponseBody
public class AdminController {
    @PostMapping("/delete")
    public String delete() {
        // 暂不关心方法体
    }
}

为了便于使用,Spring MVC框架还提供了@RestController注解,它使用了@Controller@ResponseBody作为元注解,所以,同时具有这2个注解的效果,例如:

// @Controller    // 不再需要
// @ResponseBody  // 不再需要
@RestController   // 同时具有@Controller和@ResponseBody的效果
public class AdminController {
    @PostMapping("/delete")
    public String delete() {
        // 暂不关心方法体
    }
}

其源代码为:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
    @AliasFor(
        annotation = Controller.class
    )
    String value() default "";
}

与此类似的还有@RestControllerAdvice,同时具有@ControllerAdvice@ResponseBody的效果。

Spring MVC框架的相关注解

  • @RequestMapping:可以添加在控制器类上,也可以添加在处理请求的方法上,主要用于配置请求路径,还可以配置其它与请求相关的设置,例如通过此注解的method属性来限制请求方式
  • @PostMapping:添加在处理请求的方法上,主要用于配置请求路径,及其它与请求相关的参数,是将请求方式限制为POST@RequestMapping
  • @GetMapping:与@PostMapping类似,区别在于限制请求方式为GET
  • @PutMapping:与@PostMapping类似,区别在于限制请求方式为PUT
  • @DeleteMapping:与@PostMapping类似,区别在于限制请求方式为DELETE
  • @RequestParam:添加在处理请求的方法的参数上,用于:配置请求参数的名称、要求必须提交此参数(不允许为null)、设置请求参数的默认值(不提交时视为某值)
  • @PathVariable:添加在处理请求的方法的参数上,当设计URL时使用了占位符,则必须在方法的参数上通过此注解来获取占位符对应的值
  • @RequestBody:添加在处理请求的方法的POJO类型的参数上,添加此注解后,客户端提交的请求参数必须是对象格式的,如果未添加此注解,客户端提交的请求参数必须是FormData格式的
  • @ResponseBody:参考前节说明
  • @RestController:参考前节说明
  • @ExceptionHandler:添加在处理异常的方法上
  • @ControllerAdvice:添加在某个类上,则此类中特定的方法(例如处理异常的方法)将作用于整个项目每次处理请求的过程中
  • @RestControllerAdvice:参考前节说明
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值