Spring Boot(2):Spring Boot整合MVC框架,就是这么简单!

上一篇是Spring Boot快速入门:Spring Boot(1):快速入门及自动配置源码剖析,如果还不接触过,建议先去看看上一篇文章。本章接着上一篇文章继续讲解Spring Boot Web开发,也是相当web的综合开发。

本文使用thymeleaf模版引擎,在以后的文章中同样也是使用thymeleaf模版引擎。

一、Spring Boot 集成MVC框架

1、引入依赖

Spring Boot 集成 Spring MVC 框架并实现自动配置,只需要在 porn 中添加以下依赖即可, 不需要其他任何配置。

				<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
          <!--Thymeleaf模版引擎-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>  

2、项目结构

2、Web 应用目录结构

Web 的模板文件位于resources/templates目录下,模板文件使用的静态资源文件,如: JS 、 css 、图片,存放在 resources/static 目录下 。 在 MVC 中, 视图名自动在 templates 目录下找到对应的模板名称,模板中使用的静态资源将在 static 目录下查找 。

3、编写controller层

使用 Spring MVC 只需要在类上声明@Controller, 标注这是一个 Controller 即可。 对于用户请求, 使用@RequestMapping 映射 HTTP 请求到特定的方法处理类 。

@Controller
public class UserController {
    @RequestMapping("/hello")
    public String test(Model model) {
        model.addAttribute("name","MarkerJava");
        model.addAttribute("user", Arrays.asList("merk","java"));
        return "test";
    }
}

对以上代码的注解进行剖析

  • @Controller 作用于类上 ,表示这是一个 MVC 中的 Controller。

  • @RequestMapping 可以作用在方法或类上。如上面代码,如果用户访问/hello,然后它会交由UserController.test方法来处理。stest() 方法返回的类型是字符串,默认是视图的名称 。 Spring Boot 的视图默认保存在resources/templates 目录下 , 因 此, 渲染的视图是/resources/templates/test.html模板文件。

  • 如果想直接返回内容而不是视图名 ,而是 JSON 字符串,则需要在方法上使用@ResponseBody即可。ResponseBody 注解直接将返回的对象输出到客户端, 如果是字符串 ,则默认使用 Jackson 序列化成 JSON 字符串后输出 。

    • @Controller
      public class UserController {
          @RequestMapping("/hello")
        	@ResponseBody
          public String test() {
              return "test";
          }
      }
      
    • 这时候他就会返回test字符串,而不是html页面。ResponseBody 注解直接将返回 的对象输出到客户端, 如果是字符串 , 是 ,则默认使用 Jackson 序列化成 JSON 字符串后输出 。

4、编写一个test.html页面

页面保存在resources/templates 目录下

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
  <p>微信搜索:MarkerJava</p>
</body>
</html>

这时候,打开浏览器访问默认端口localhost:8080/hello即可访问到html页面的内容:微信搜索:MarkerJava了。

二、controller层方法的参数

在学习Spring 的时候 Controller 方法可以接受多种类型参数,比如path变量,以及MVC的Model等,除此之外,方法还能接受更多的参数如下。

方法参数作用
@Path Variable用于从请求URL中获取参数井映射到方法参数中
Model & ModelAndView渲染视图的模型 & 包含了模型和视图路 径的对象
@RequestParam对应于 HTTP 请求的参数, 自动转化为参数对应 的类型
@RequestHeader对应于 HTTP 请求头参数, 自动转化为对应的类型
MultipartFile用于处理文件上传 。
@RequestBody 自动将请求内容转为指定的对象,默认使用 HtthMessageConverte 来转化
@RequestPart用于文件上传, 对应于 HTTP 协议的 multipart/form-data
@SessionAttribute该方法标注的变量来 自于 Session 的属性
@RequestAttribute该标注的变量来自于 request 的属性
BindingResult 和 Errors用来处理绑定过程 中的错误。
HttpMethod枚举类型,对应于 HTTP Method,如 POST 、GET.

对常用部分参数进行说明

  1. Model & ModelAndView
    • Model addAttribute(String attributeName, Object attributeValue) ,向模型添加一个变量, attributeN ame 指明了变量的名称, 可以在随后的视图里引用, attributeValue 代表了变量。

    • Model addAttribute(Object attribute Value),向模型添加一个变量, 变量的名字就是其类名字首字母小写后转为的Java 变量 。

    • Model addAllAttributes(Map at位ibutes), 添加多个变量, 如果变量已经存在, 则覆盖。

  2. @RequestParam注解的属性
    • value ,指明 HTTP 参数的名称
    • required,400 错误 。boolean 类型, 声明此参数是否必须
    • defaultValue , 字符类型, 如果 HTTP 参数没有提供, 可以指定一个默认字符串, 类型转化为目标类型, 如上一个例子, 我们可以提供默认参数。
  3. @ RequsetBody
    • Controller 方法带有@RequsetBody 注解的参数 , 意味着请求的 HTTP 消息体的内容是一个 JSON, 需要转化为注解指定 的参数类型。Spring Boot 默认使用 Jackson 来处理反序列化工作。
  4. MultipartFile处理文件上传
    • getOriginalF ile name:获取上传的文件名字
    • getBytes :我取上传文件内容,转为字节数组
    • getlnputStream:获取一个 InputStream
    • isEmpty:文件上传内容为空 ,或者就没有文件上传
    • getSize:获取文件大小
    • transferToσile dest:保存上传文件到目标文件系统

三、JSR-303

JSR-303 是 Java 标准的验证框架

注解作用
@Null验证对象是否为空
@NotNull验证对象不为空
@NotBlank验证字符串不为空或者不是空字符串
@NotEmpty验证对象不为 null, 或者集合不为空
@Size(min=, max=)验证对象长度, 可支持字符串、集合
@Length字符串大小
@Min验证数字是否大于等于指定的值
@Max验证数字是否小于等于指定的值
@Digits验证数字是否符合指定格式
@Range验证数字是否在指定的范围内
@Email验证是否为邮件格式, 为 null 则不做校验
@Patten验证 String 对象是否符合正则表达式的规则

四、扩展Spring MVC使用@Configuration

将该类变成一个配置类,WebMvcConfigurer是用来全局定制化Spring Boot的MVC特性,我们可以通过实现WebMvcConfigurer 接口来配置应用的 MVC 全局特性。

使用一般新建一个包config与controller同级的,然后编写一个类,且在该类上使用@Configuration意思就是将该类变成一个配置类,代码如下。

//将该类变成一个配置类
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
    //实现了视图解析器接口的类,我们把它看作视图解析器
    @Bean
    public ViewResolver myViewResolver() {
        return new MyViewResolve();
    }
    public static class MyViewResolve implements ViewResolver {
        @Override
        public View resolveViewName(String viewName, Locale locale) throws Exception {
            return null;
        }
    }
    //URI到视图的映射
    //视图跳转,打开浏览器访问.../markjava,然后就可以跳转到test.html页面
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/markjava").setViewName("test");
    }
  //拦截器
  public void addinterceptors(InterceptorRegistry registry){}
  //跨域访问配置
  public void addCorsRegistry(CorsRegistry registry){}
  //格式化
  public void addFormatterRegistry(FormatterRegistry registry){}

参考

Spring Boot 2精髓从构建小系统到架构分布式大系统.李家智(书籍)
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值