[框架]Spring MVC框架

这篇具有很好参考价值的文章主要介绍了[框架]Spring MVC框架。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

关于Spring MVC框架

Spring MVC框架的依赖项

使用Spring MVC框架接收请求

关于@RequestMapping注解

关于RESTful

关于@RequestParam注解

@RequestParam注解是添加在方法的参数上的,它的作用主要有:  

其它


关于Spring MVC框架

MVCModel + View + Controller  

Spring MVC框架主要解决了接收请求、响应结果及相关问题(例如处理异常等),即主要关注C的问题,在不是前后端分离的项目,还关心V的问题,但是,并不关心M的问题。  

 Model:模型,数据处理的流程和规则。具体表现为service和mapper的整合。

 文章来源地址https://www.toymoban.com/news/detail-513621.html

Spring MVC框架的依赖项

Spring MVC框架的基础依赖项是:spring-webmvc  

在Spring Boot中,使用Spring MVC框架应该添加依赖项:spring-boot-starter-web  

 

使用Spring MVC框架接收请求

应该创建控制器类,并在控制器类上添加@Controller注解,在Spring MVC框架中,只有添加此注解的类才是控制器类!

默认情况下,在Spring MVC框架中,控制器处理请求的结果(方法的返回值)将被视为“视图组件的名称”,当在处理请求的方法上添加@ResponseBody注解后,返回的结果才会被视为“响应到客户端的数据”,@ResponseBody注解还可以添加在控制器类上,表示此类中所有处理请求的方法的返回结果都是“响应到客户端的数据”,这种做法称之为“响应正文”,或者,也可以将控制器类上的注解改为@RestController,它是@Controller@ResponseBody的组合注解!

包括处理异常的“全局异常处理器类”,需要添加的其实是@ControllerAdvice注解,添加此注解的类中的特定方法(例如处理异常的方法)将可以作用于每次处理请求的过程中,但是,默认情况下,仍不是“响应正文”的,所以,当处理异常需要响应正文时,需要在处理异常的方法上添加@ResponseBody注解,或在全局异常处理器的类上添加@ResponseBody注解,或将@ControllerAdvice改为@RestControllerAdvice

在控制器类上,可以自定义方法用于处理请求,关于这些方法:

  • 访问权限:应该是public

 

  • 返回值类型:当响应正文时,可自行将需要响应的数据属性封装在自定义类中,使用自定义类作为返回值类型

    • 当使用自定义类型进行响应正文时,需要:

      • 需要添加jackson-databind依赖项,在spring-boot-starter-web中已经包含

      • 需要启用Spring MVC的注解增强,如果使用XML配置(早些年用的多),需要添加<annotation-driven/>,如果使用配置类进行配置,需要在配置类上添加@EnableWebMvc注解,否则,响应时会出现406错误,在Spring Boot项目不需要手动配置

  • 方法名称:自定义

  • 参数列表:按需添加,且各参数不区分先后顺序,可以将各请求参数逐一作为参数列表中的参数,也可以将多个请求参数封装到自定义类型中,使用自定义类型作为方法参数列表中的参数,还可以按需添加HttpServletRequestHttpServletResponseHttpSession等,在使用其它技术框架后,还可以按需添加其它参数,例如结合@AuthenticationPrincipal注解添加Spring Security的当事人

  • 抛出异常:理论上,处理请求的方法不应该处理异常,而应该抛出,进而交由全局异常处理器进行处理

所有处理请求的方法都必须添加@RequestMapping系列(还有GetMapping,PostMapping等)的某个注解,通过这些注解来配置请求路径。

 

 

关于@RequestMapping注解

@RequestMapping注解的主要作用是配置请求路径,通常,在类上应该配置此注解,例如:  

@RestController
@RequestMapping("/admin")
public class AdminController {}

在方法上,建议使用限制了请求方式的某个基于@RequestMapping的注解,例如:

@RestController
@RequestMapping("/admin")
public class AdminController {
    
    @PostMapping("/login")
    public JsonResult login() {
        // ...
    }
    
    @GetMapping("/list")
    public JsonResult list() {
        // ...
    }
    
}

如果响应可能出现乱码,建议在类上的@RequestMapping上配置produces属性,以指定响应的文档类型,例如:

@RestController
@RequestMapping(value = "/admin", produces = "application/json; charset=utf-8")
public class AdminController {}

 

 

关于RESTful

RESTful是一种软件设计的风格(并不是规则或规范)。

RESTful的典型特征包括:

  •  将某些具有“唯一性”的参数值作为URL的一部分,例如:
http://localhost:9080/album/9527/delete
https://gitee.com/chengheng2022/jsd2302-csmall-server-teacher
  • 是前后端分离的,即:是响应正文的

  • 根据处理数据的方式来选择请求方式

    • 增加新的数据时,应该提交POST类型的请求

    • 修改数据时,应该提交PUT类型的请求

    • 删除数据时,应该提交DELETE类型的请求

    • 获取数据时,应该提交GET类型的请求

    • 通常不照做(因为业务的复杂性很难去界定具体使用哪一个)

Spring MVC框架很好的支持了RESTful风格,当设计URL时,如果URL中包含参数值,可以使用{自定义名称}进行占位,例如:

// http://localhost:9180/album/9527/delete
@PostMapping("/{id}/delete")
//             ↑↑↑↑ 占位符

然后,在处理请求的方法上,在对应的参数上添加@PathVariable注解,表示此参数值来自URL中同名占位符对应的值,例如:

@PostMapping("/{id}/delete")
public JsonResult delete(@PathVariable Long id) {
    // ...
}

如果占位符中的名字与参数的变量名不同,需要在@PathVariable注解上指定参数,例如:

@PostMapping("/{id}/delete")
public JsonResult delete(@PathVariable("id") Long albumId) {
    //                                ↑↑↑↑↑↑ 指定注解参数,与占位符名称一致,则方法参数的变量名已经不重要了
    // ...
}

在配置占位符名称时,可以在自定义名称的右侧添加冒号,然后,在冒号右侧添加正则表达式,以限制URL传入的值的格式,例如:

@PostMapping("/{id:[0-9]+}/delete")

经过以上配置,只有占位符位置是纯数字的请求才可以匹配上,如果占位符位置不是纯数字的请求(例如/abc/delete)则会响应404

注意:多不冲突的正则表式达的占位设计是允许共存的,例如:

@PostMapping("/{id:[0-9]+}/delete")
public JsonResult delete1() {}
@PostMapping("/{xx:[a-z]+}/delete")
public JsonResult delete2() {}

9527/delete的请求就走delete1,abcd/delete的请求就走delete2,彼此不冲突。 

另外,如果还有某个配置没有使用占位符的设计,也是允许与以上设计共存的,例如:

@PostMapping("/test/delete")
public JsonResult deleteTest() {}

关于RESTful风格的URL设计,如果你没有更好的选择,可以参考:

  • 查询数据列表,格式为:/数据类型的复数

    • 例如:/albums

  • 获取某类型的1个数据,格式为:/数据类型的复数/{数据ID}

    • 例如:/albums/{id:[0-9]+}

  • 对某类型的1个数据执行某个数据管理操作,格式为:/数据类型的复数/{数据ID}/命令

    • 例如:/albums/{id:[0-9]+}/delete

 

 

关于@RequestParam注解

@RequestParam注解是添加在方法的参数上的,它的作用主要有:  

  •  配置请求参数的名称(用于请求参数的名称与方法参数不同时),例如:
// http://localhost:8080/login?username=root
public JsonResult login(@RequestParam("username") String xxx) {
    // ...
}
  • 配置必须提交某个请求参数,因为此注解required属性默认值为true

    • 此功能可以通过Validation框架来实现

  • 配置某个请求参数的默认值,例如:  
// http://localhost:8080/list
public JsonResult list(@RequestParam(defaultValue = "1") Integer page) {
    // ...
}

 

 

其它

例如全局异常处理器等

 

 

到了这里,关于[框架]Spring MVC框架的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java EE】关于Spring MVC 响应

    在博主前面写的博客 【Java EE】Spring请求如何传递参数详解 中我们已经设置了响应数据,Http响应结果可以是数据,也可以是静态⻚⾯,也可以针对响应设置状态码, Header信息等 首先我们像创建一个静态界面,创建位置如下: 前端代码如下: 不过这里的后端的代码和以前的代码

    2024年04月14日
    浏览(35)
  • Spring MVC框架

    Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts 2(一

    2024年02月05日
    浏览(30)
  • 38、springboot为 spring mvc 提供的静态资源管理,覆盖和添加静态资源目录

    ▲ 默认的四个静态资源目录: /META-INF/resources /resources /static /public ▲ ResourceProperties.java类的源代码,可看到CLASSPATH_RESOURCE_LOCATIONS常量的定义: CLASSPATH_RESOURCE_LOCATIONS = new String[]{“classpath:/META-INF/resources/”, “classpath:/resources/”, “classpath:/static/”, “classpath:/public/”}; 这意味

    2024年02月11日
    浏览(29)
  • JavaWeb框架:Spring MVC介绍

    MVC(Model View Controller,模型-视图-控制器) ,作为一种设计模式,用于应用程序的分层开发。 Spring MVC ,由 Spring 框架提供的基于 MVC 设计模式的一个轻量级 Web 开发框架。Spring MVC 提供了一个前端控制器 DispatcherServlet 来分派请求,然后通过配置处理程序映射、视图解析等,使

    2024年02月12日
    浏览(29)
  • 【Spring框架全系列】初识Spring MVC(上)

    🌃哈喽,大家好,我是小浪。接着上篇博客,我们学习了springboot配置日志文件,到此,那么springboot的内容也更新的差不多了,由于是初学阶段,所以不学习那么深入,那么我们学习框架都知道SSM,当前我们已经学习完毕springboot了,那么今天就来学习第二个S,Spring MVC;📬📬

    2024年02月07日
    浏览(107)
  • SSM框架整合:掌握Spring+Spring MVC+MyBatis的完美结合!

    (1) 创建工程 创建一个Maven的web工程 pom.xml添加SSM需要的依赖jar包 编写Web项目的入口配置类,实现 AbstractAnnotationConfigDispatcherServletInitializer 重写以下方法。 getRootConfigClasses() :返回Spring的配置类-需要 SpringConfig 配置类。 getServletConfigClasses() :返回SpringMVC的配置类-需要 SpringMvc

    2024年01月17日
    浏览(45)
  • 【SpringMVC】基于 Spring 的 Web 层MVC 框架

    🎄欢迎来到@边境矢梦°的csdn博文🎄 🎄本文主要梳理SpringMVC : 基于 Spring 的 Web 层MVC 框架 🎄 🌈我是边境矢梦°,一个正在为秋招和算法竞赛做准备的学生🌈 🎆喜欢的朋友可以关注一下 🫰🫰🫰 ,下次更新不迷路🎆 Ps: 月亮越亮说明知识点越重要 (重要性或者难度越大

    2024年02月08日
    浏览(34)
  • JavaWeb开发框架对比与选择:Struts、Spring MVC、JavaEE

    引言:         在JavaWeb开发领域,选择合适的开发框架对于项目的成功与否至关重要。随着技术的不断发展,出现了许多优秀的开发框架,其中最为知名的包括Struts、Spring MVC和JavaEE。本文将对这三个框架进行对比,并给出选择的建议。 一、Struts框架         Struts是一

    2024年02月04日
    浏览(32)
  • 探索Java中最常用的框架:Spring、Spring MVC、Spring Boot、MyBatis和Netty

    🎉欢迎来到Java面试技巧专栏~探索Java中最常用的框架:Spring、Spring MVC、Spring Boot、MyBatis和Netty ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹 ✨博客主页:IT·陈寒的博客 🎈该系列文章专栏:Java面试技巧 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习

    2024年02月08日
    浏览(43)
  • 【Spring框架二】——什么是Spring IOC、 什么是Spring 依赖注入

    【Spring框架一】——Spring框架简介 【Spring框架三】——Spirng IOC和DI的实现 本篇博客主要讲解的是Spring 的IOC以及DI(依赖注入)的基本概念和优势利弊,如果想知道如何实现Spring IOC与DI可以访问博主的另外一篇博客。 【Spring框架三】——Spirng IOC和DI的实现 它的核心思想是将对

    2024年02月06日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包