• 后端——框架——视图层框架——spring_mvc——《官网》阅读笔记——第一章节30(注解,Handler方法注解)


    1、请求

    1.1  url映射

      建立客户端请求与方法的映射关系是根据客户端请求的url与方法的url。方法的url由@RequestMapping注解指定的。它有以下几种简便的方式。

      当请求的类型为GET时,使用@GetMapping

      当请求的类型为POST时,使用@PostMapping

      当请求的类型为Put时,使用@PutMapping

      当请求的类型为Delete时,使用@DeleteMapping

      当请求的类型为Patch时,使用@PatchMapping

      不建议使用@RequestMapping,@GetMapping,@PostMapping更方便,简洁。

    1.2   @RequestMapping

      在类上的@RequestMapping注解,会给所有handler方法设置根路径。它的属性如下:

    1. value:设置方法的url值。
    2. method:设置请求方法的类型,值为枚举类型,GET,POST等等,当使用简便方式时,可以忽略。
    3. consumes:设置请求的数据类型,当请求数据类型不符合时,映射失败。等价于在请求映射时添加数据类型的条件。
    4. produces: 设置响应的数据类型。它们都是枚举值,参考MediaType类型。或字符串的MIME类型
    5. params:在请求映射时添加请求参数的条件,有以下三种情形
      • myParam:请求参数中存在myParam,不存在时,映射失败
      • !myParam:请求参数中不存在myParam,存在时,映射失败
      • myParam=myValue:请求参数中存在myParam,值必须为myValue,不符合时,映射失败。

      6.headers:与params用法相同,区别在于params表示请求参数,headers表示请求头

    1.3  自定义组合注解

      @GetMapping,@PostMapping是@RequestMapping的组合注解,我们也可以自定义组合注解。

      @PostMapping是@RequestMapping的method属性为POST,本示例将自定义注解@PostJsonMapping,基于@PostMapping的consumes,produces属性都是Application/json,utf-8

    /**
     * 
     * @File Name: PostJsonMapping.java 
     * @Description: 自定义组合注解
     * @version 1.0
     * @since JDK 1.8
     */
    @Documented
    @Retention(RUNTIME)
    @Target(METHOD)
    @RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
    public @interface PostJsonMapping {
    	/**
    	 * Alias for {@link RequestMapping#name}.
    	 */
    	@AliasFor(annotation = RequestMapping.class)
    	String name() default "";
    
    	/**
    	 * Alias for {@link RequestMapping#value}.
    	 */
    	@AliasFor(annotation = RequestMapping.class)
    	String[] value() default {};
    
    	/**
    	 * Alias for {@link RequestMapping#path}.
    	 */
    	@AliasFor(annotation = RequestMapping.class)
    	String[] path() default {};
    
    	/**
    	 * Alias for {@link RequestMapping#params}.
    	 */
    	@AliasFor(annotation = RequestMapping.class)
    	String[] params() default {};
    
    	/**
    	 * Alias for {@link RequestMapping#headers}.
    	 */
    	@AliasFor(annotation = RequestMapping.class)
    	String[] headers() default {};
    }
    

    1.4  自定义映射实现

      Spring mvc支持自定义请求URL到方法的映射逻辑实现。通过继承RequestMappingHandlerMapping,重写getCustomMethodCondition方法,它的返回值是RequestCondition类型。

    1.5    url中的通配符

      url中的通配符有以下三个

    1. ? 匹配单个字符
    2. * 匹配0或多个字符
    3. ** 匹配url路径的多个层次,例如test/**,会匹配test/a,test/a/b,test/a/b/c

    1.6   url映射的规则

    1. 第一步,会根据方法的URL中变量(1),通配符(1),double通配符(2)的个数计算URL的count值,值越大,URL路径越不精确。方法的URL越精确,匹配优先级越高。
    2. 第二步,会根据方法的URL层次长度匹配,在count值相等的情况下,层次越长,方法的URL越精确,例如test/a/b/c比test/abcd要长。
    3. 第三步,根据方法URL上的后缀匹配,例如*.do。不建议这种方式,是因为spring mvc会根据请求的后缀判断请求内容的MIME类型。

    1.7   代码方式配置url

      在使用spring mvc时,通常是在Controller的方法上直接添加@RequestMapping或它的组合注解,通过设置注解的属性值配置URL。

      另外一种不常用,只是为了学习了解一下,通过代码方式

    @Configuration
    @ComponentScan(basePackages = "controller")
    public class ControllerConfig {
    
    	@Autowired
    	public void setHandlerMapping(RequestMappingHandlerMapping mapping, TestController controller) throws NoSuchMethodException {
    		// 创建RequestMappingInfo对象
    		RequestMappingInfo  info = RequestMappingInfo.paths("/test/exception").methods(RequestMethod.GET).build();
    		// 获取Method对象
    		Method method  = TestController.class.getMethod("testViewResolver");
    		// 建立映射关系
    		mapping.registerMapping(info, controller, method);
    	}
    }
    

      可以看到本质是建立Method对象与RequestMappingInfo对象之间的关系。

    2、响应

      与请求相比,响应的注解比较少。

    1. @ResponseBody:获取response对象的输出流,此时返回的任何值都是输入流中的内容。
    2. @JsonView:与@ResponseBody配合使用,将返回值转换为JSON字符串,写入到输入流中。JSON的API为Jackson。
  • 相关阅读:
    20145204实验反思与总结
    20145204《信息安全系统设计基础》课程总结
    家庭作业:12.18,9.13,8.25,2.62
    20145204张亚军第14周博客总结
    20145204 张亚军《信息安全系统设计基础》第13周学习总结
    SLB技术原理浅析
    jumpserver在终端修改管理员密码及新建超级用户
    批量杀掉多个pid文件中记录的pid进程, 并集成到shell脚本中
    修改daemon.json重新加载后docker无法启动问题
    Docker的配置文件 daemon.json 详解
  • 原文地址:https://www.cnblogs.com/rain144576/p/12902946.html
Copyright © 2020-2023  润新知