zoukankan      html  css  js  c++  java
  • 0105 springMVC开发基础

    背景

    已经明确了MVC的思想和SpringMVC的基本流程,下面就都具体的mvc开发细节知识了。

    @RequestMapping

    springMVC核心流程中,启动阶段会把注解@RequeestMapping注解所配置的内容保存到HandlerMapping中,然后等待请求到达。

    看一下源码:
    file

    简单分一下类:

    方法 说明
    name,value,path 标识控制器方法的访问url,可以配置多个
    method 处理的方法,http的标准方法,比如get,post等
    params 参数
    headers 请求头
    consumers 接受请求的资源类型
    produces 响应的资源类型

    说明:

    • url在一个系统中应该保持唯一,能正确标明资源的含义;
    • springboot新增了派生的方法注解,@PostMapping @GetMapping等;

    控制器参数 自定义参数转换

    在进入控制器的方法之前,会对http的参数和上下文进行解析,转换为控制器所需的参数;
    自定义参数转换规则:适用于特殊形式的参数解析,比如第三方公司参数使用加密的方式

    处理器转换参数流程:

    WebDataBinder机制:参数的转换,参数的验证;

    file

    接口 说明
    converter 普通的转换
    GenericConverter 数组类型的转换
    formatter 格式化

    springboot的自动注册参数转换:
    WebMvcAutoConfigurationAdapter类中自动注册的代码:所以,只要实现了这三个接口,并被安装到ioc中,就自动注册到了springMVC的参数处理流程中了;

    @Override
    public void addFormatters(FormatterRegistry registry) {
    	for (Converter<?, ?> converter : 
        getBeansOfType(Converter.class)) {
    				registry.addConverter(converter);
    			}
    	for (GenericConverter converter : getBeansOfType(GenericConverter.class)) {
    				registry.addConverter(converter);
    			}
    	for (Formatter<?> formatter : 
        getBeansOfType(Formatter.class)) {
    				registry.addFormatter(formatter);
    			}
    		}
    

    常规参数处理:

    类型 说明
    无注解下获取参数 url中的参数名字跟控制器方法的参数名称一致,并且允许为空
    @RequestParam 可以配置url中参数名称,并设置是否必须,并给出默认值
    传递数组 数组元素通过逗号分隔
    传递json 定义一个对象,并标注为@RequestBody
    url传递参数 url参数用{}包起来,而控制器方法参数标注为@PathVariable
    获取格式化参数 @DateFormate @DateTimeFormate,@NumberFormate可以定义接受参数的格式
    请求头参数 @RequestHeader("x")注解标注控制器方法
    自定义参数解析 实现HttpMessageConverter接口

    说明:

    • springboot中可以通过属性spring.mvc.date-formate来配置

    数据验证

    主要是集成了JSR303验证,采用的是Hibernate-validator机制来验证;

    常见验证注解

    注解 说明
    @NotNull 不能为Null
    @Future 必须是将来的日期
    @Past 必须是过去的日期
    @DecimalMin @Min 最小值
    @DecimalMax @Max 最大值
    @Range 范围
    @Email 必须是邮箱格式
    @Size 字符串的长度范围

    使用方式

    参数方法中,参数对象前标注@Valid ,在对象Errors中可以得到校验失败的信息

    自定义参数校验:

    核心接口:Validator ,自定义数据校验器需要实现该接口;
    使用:注册到WebDataBinder中;
    @InitBinder注解标注的方法会在调用控制器之前执行;

    ModelAndView 视图和视图解析器

    在springmvc的控制器中,如果参数中使用了ModelAndView,Model,ModelMap,会自动创建数据模型


    视图是渲染数据模型展示给用户的组件,分为逻辑视图和非逻辑视图,
    逻辑视图需要视图解析器viewResolver进行进一步的定位,比如jsp视图
    而非逻辑视图不需要进一步的定位,如MappingJacksonJsonView;

    视图接口:两个核心方法
    getContentType();
    reder(model, request ,response);

    自定义pdf的例子:

    TODO

    拦截器

    springMVC的流程中,根据HandlerMapping会得到一个HandlerExecutionChain,这个对象中包含了一个控制器和一个拦截器列表;通过拦截器可以增强处理器的功能;

    拦截器接口代码:

    file

    三个方法的执行时间相对的是控制器;

    自定义拦截器步骤:

    1. 实现HandlerInterceptor类;
    2. 配置类实现 WebMvcConfigurer,注册自定义的拦截器;
    3. 多个拦截器按照注册的先后顺序执行拦截;

    国际化

    不同地区的人,时间和语言不同,springMVC对国际化提供了很好的支持。
    MessageSource来定义的;
    如果resources目录下无messages.properties文件,不启用国际化;

    国际化解析器 说明
    AcceptHeader 通过L浏览器头来实现国际化区域
    Fixed 固定的国际化区域
    Cookie 基于Cookie来确定
    Session 基于Session来确定

    文件上传

    springMVC对文件上传提供了良好的支持。DispatchServlet会把文件上传的请求HttpServletRequest转换为MultipartHttpServletRequest;
    而它需要配置好MultipartResolver,springboot默认提供了StandardServletMultipartResolver,这个只需要依赖servlet-api包;

    配置方式:

    spring.servlet.multipart.enabled=true
    spring.servlet.multipart.max-file-size=1MB
    spring.servlet.multipart.max-request-size=10MB
    
    

    控制器写法:

    @PostMapping("/upload/part")
    @ResponseBody
    public String uplaod(Part file){
        //保存文件到本地或者云服务,返回解析路径
        
    }
    
    

    其它

    不常用的springMVC相关知识点;

    知识点 说明
    重定向 字符串跳转redirect:/xxx , addFlashAttribute(k,v)可以给redirect添加参数
    @ControllerAdvice 定义控制器的增强
    @InitBinder 定义自定义的转换器,校验器,在控制器执行前调用
    @ModelAttribute 增加模型的公共参数,不常用
    @ExceptionHandler 处理控制器的异常

    原创不易,转载请注明出处。

  • 相关阅读:
    Siege 3.0 正式版发布,压力测试工具
    Pomm 1.1.2 发布,专为 PG 设计的 ORM 框架
    Whonix 0.5.6 发布,匿名通用操作系统
    国内开源 java cms,Jspxcms 2.0 发布
    EZNamespaceExtensions.Net v2013增加对上下文菜单、缩略图、图标、属性表的支持
    GNU Guile 2.0.9 发布,Scheme 实现
    jdao 1.0.4 发布 轻量级的orm工具包
    OpenSearchServer 1.4 RC4 发布
    Percona Server for MySQL 5.5.3030.2
    Samba 4.0.5 发布
  • 原文地址:https://www.cnblogs.com/snidget/p/12153794.html
Copyright © 2011-2022 走看看