b Spring MVC Filters过滤器详解 & request mapping注解 & Handler Methods &databinder

–> go to 总目录

文章目录

  • 1.2 Filters
    • 1.2.1 Form Data
    • 1.2.2 Forwarded Headers
    • 1.2.3 Shallow ETag
    • 1.2.4 CORS配置
  • 1.3 注解Controllers
    • 1.3.1 声明Declaration
      • AOP代理
    • 1.3.2 Request Mapping 重要
      • URI patterns
        • @PathVariable
        • 正则表达式解析
      • Pattern Comparison 模式比价
      • Suffix Macth 后缀匹配。
      • Suffix Match and RFD
      • Consumable Media Types(Content-Type条件)
      • Producible Media Types (Accept条件)
      • Parameters, headers (按参数条件匹配)
      • HTTP HEAD, OPTIONS
      • Custom Annotations 自定义注解
      • Explicit Registrations 明确的注册
    • 1.3.3 Handler Methods
      • Method Arguments 方法参数
      • Return Values 支持的返回值
      • Type Conversion 参数代表注解
      • Matrix Variables
      • @RequestParam
      • @RequestHeader
      • @CookieValue
      • @ModelAttribute
        • 使用Web DataBinder
      • @SessionAttributes
      • @SessionAttribute
      • @RequestAttribute
      • Redirect Attributes 重定向是属性值得传递
      • Flash Attributes
      • Multipart 多片传输
      • @RequestBody
      • HttpEntity
      • @ResponseBody
      • ResponseEntity
      • 重要关于Jackson JSON
        • JSON Views
    • 1.3.4 Model
    • 1.3.5 DataBinder重要
    • 1.3.6 Exceptions 异常处理
      • Method Arguments
      • return values
      • REST API exceptions
    • 1.3.7. Controller Advice

1.2 Filters

b Spring MVC Filters过滤器详解 & request mapping注解 & Handler Methods &databinder_第1张图片

1.2.1 Form Data

浏览器可以提交form data,通过HTTP GET或者HTTP POST。但是非浏览器端也会用HTTP PUT, PATCH, and DELETE。Servlet API要求ServletRequest.getParameter*()方法支持只允许从POST获取参数。
spring-web模块提供FormContentFilter去拦截HTTP PUT, PATCH, and DELETE requests ,谁拥有application/x-www-form-urlencoded,从请求body里读取form data,并且包装ServletRequest去让ServletRequest.getParameter*()可以获得到。

1.2.2 Forwarded Headers

作为一个请求通过代理后,host、port和scheme也许会变,这让link能准确的链接到正确的Host、port和scheme上是一个挑战。
RFC 7239规范,定义了Forwarded HTTP header, 让代理proxy可以用来提供关于原始请求的信息。也有非标准的header,包含X-Forwarded-Host, X-Forwarded-Port, X-Forwarded-Proto, X-Forwarded-Ssl, and X-Forwarded-Prefix
ForwardedHeaderFilter是一个Servlet filter可以修改requestde 的host,port,scheme基于Forwarder。这个filter依赖包装request,因此他必须在其他filter前面,例如RequestContextFilter(必须是用被修改后的request,而不是原来的)
由于一个应用不知道headers是否被代理,或者被恶意client添加或修改过。出于对forwarded的安全考虑,proxy应该配置成移除不被信任Forwarded headers。你也可以配置ForwardedHeaderFilterremoveOnly=true,来移除并不使用这个headers。
异步请求
为了支持异步永清和error跳转,这个filter应该被配置DispatcherType.ASYNCDispatcherType.ERROR。如果使用Spring框架的AbstractAnnotationConfigDispatcherServletInitializer,所有的filter会被注册成拥有对应的dispatch types。
如果使用了web.xml进行配置,或者spring boot通过FilterRegistrationBean来包含DispatcherType.ASYNC DispatcherType.ERROR 需要额外添加DispatcherType.REQUEST

1.2.3 Shallow ETag

ShallowEtagHeaderFilter会创建一个shallowETAG来缓存被写入response的content和计算一个MD5的hash。下次clents同样发送时,它会比较If-None-Match,相同就返回一个304(NOT_MODIFIED)的标记。

这种策略节省网络带宽,但不节省cpu,当全response必须被计算和比较。其他策略在conroller级别,避免计算。
filter拥有writeWeakETag参数来配置filter去写弱ETags,如
W/"02a2d595e6ed9a0b24f027f2b63b134d6在RFC 7232的规范里。
为了去支持asynchronous requests,filter必须被配置成DispatcherType.ASYNC以便于在最后一步分发结束的时候生成ETag。

1.2.4 CORS配置

1.3 注解Controllers

Spring MVC支持注解驱动的@Controller@RestCOntroller
一个简单的示例

你可能感兴趣的:(b Spring MVC Filters过滤器详解 & request mapping注解 & Handler Methods &databinder)