处理器映射

11spring启动阶段就会将@RequestMapping所配置的内容保存到处理器映射HandlerMapping机制中去

22等待请求,通过拦截器拦截请求信息与HandlerMapping进行匹配并找到对应的处理器

33将处理器和按揭器保存到HandlerExecutionChain中,返回给DisopatherServlet。

因此:

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {
String name() default "";//配置请求映射名称 @AliasFor("path")//通过路径映射
String[] value() default {}; @AliasFor("value")//通过路径映射会path配置项
String[] path() default {}; //限定只响应http请求,如get post head options put trache,默认是所有的响应请求。
RequestMethod[] method() default {};
//存在对应的http参数时才响应
String[] params() default {};
//限定请求头存在对应的参数时才响应
String[] headers() default {};
//限定http请求提交类型 “text/html”
String[] consumes() default {};
//限定返回的内容类型,仅http请求中的Accept类型中包含该指定类型事才返回
String[] produces() default {};
}

注意路径是必配项目

获取控制器参数

无注解获取参数:

要求:参数名称和http参数名称保持一致,默认规则里面参数值可以为null,

@Controller
@RequestMapping("/my")
public class MyController {
@GetMapping("/no/annotation")
@ResponseBody
public Map<String,Object> noAnnotation(Integer intVal,Long longVal,String str){
Map<String,Object> paramsMap = new HashMap<>();
paramsMap.put("intVal",intVal);
paramsMap.put("longVal",longVal);
paramsMap.put("str",str);
return paramsMap;
}
}

通过@RequestParam注解获取参数

 /**
* 通过注解@RequestParam
* 目的:指定http请求参数和方法参数的映射关系,处理器按照映射关系得到参数,调用控制器方法
* 注意:默认情况下,@RequestParam标注的参数不能为空,为空会报错
* 可以通过属性required配置为false解决
* @param intVal
* @param longVal
* @param str
* @return
*/
@GetMapping("/annotation")
@ResponseBody
public Map<String,Object> Annotation(
@RequestParam("int_Val") Integer intVal,
@RequestParam("long_Val") Long longVal,
@RequestParam("str_Val") String str){
Map<String,Object> paramsMap = new HashMap<>();
paramsMap.put("intVal",intVal);
paramsMap.put("longVal",longVal);
paramsMap.put("str",str);
return paramsMap;
}

请求为:http://localhost:8867/my/annotation?int_Val=123&long_Val=1&str=str

结果

可以设置允许为空;@RequestParam(value = "str_Val",required = false) String str)

 传递数组

 /**
* 处理传递简单的值,还可以传递数组
* 支持用逗号分隔的数组参数
* 一旦方法中定义了数组,那么前端就需要依照一定的规则传递给这个方法,每个参数的数组元素需要逗号分隔
* @param intArr
* @param longArr
* @param strArr
* @return
*/
@GetMapping("/requestArray")
@ResponseBody
public Map<String,Object> requestArray(int[] intArr,Long[] longArr,String[] strArr){
Map<String,Object> paramsMap = new HashMap<>();
paramsMap.put("intArr",intArr);
paramsMap.put("longArr",longArr);
paramsMap.put("strArr",strArr);
return paramsMap;
}

传递JSON格式

通过URL传递参数

    /**
* 一些网站中,提出了REST风格,这些参数大多数都是通过URL进行传递的,
* 例如:你要获取1号员工的信息,URL:/user/1 其中1代表的就是用户编号
*
* 可以通过处理器映射和注解@PathVariable组合获取URL中的参数。
* 流程:1先通过处理器映射可以定位参数的位置和名称,
* 2使用注解@PathVariable通过名称来获取参数
* @param id
*/
@GetMapping("/{id}")
@ResponseBody
public String getId(@PathVariable("id") Long id){
return id.toString();
}
  /**
* 上面使用了@GetMapping指定一个URL,用{参数名称}来标明位置和名称,这里名称是id
* 所以在方法使用@PathVariable的时候配置的字符串为id,和上面URL参数声明对应
*/

获取格式化参数:

    @RequestMapping("/format/form")
public String showFormat(){
System.out.println("from");
return "formatter";
} @PostMapping("/format/commit")
public Map<String,Object> format(
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE) Date date,
@NumberFormat(pattern = "x,xxx.xx") Double number
){
Map<String,Object> paramsMap = new HashMap<>();
paramsMap.put("date",date);
paramsMap.put("number",number);
return paramsMap;
}

最新文章

  1. 使用KRPano资源分析工具解密被加密的XML
  2. 本地C代码中创建Java对象
  3. 九度OJ,题目1089:数字反转
  4. iis7.5应用程序池模板永久性缓存初始化失败解决方法
  5. 论文笔记之:Generative Adversarial Nets
  6. 【Java基础】Java多线程小结
  7. jquery实现鼠标焦点十字效果
  8. HttpServletResponse对象(一)
  9. 蓝桥网试题 java 基础练习 十六进制转十进制
  10. css基本布局
  11. CSA Round #54 $\ $Voting
  12. wcf类库及宿主
  13. 11g统计信息自动收集任务
  14. [学习笔记]Javascript的包装对象
  15. 布局控件Grid
  16. scrapy框架系列 (3) Item Pipline
  17. 解决Unity协程无法同步返回的问题
  18. Linux内核中锁机制之信号量、读写信号量
  19. netty 基础知识
  20. 每个zone的low memory是怎么计算出来的

热门文章

  1. Centos安装Sublime text
  2. 攻防世界之Web_php_unserialize
  3. 企业环境下用脚本设置ubuntu防火墙
  4. 【C# 锁】SpinWait结构 -同步基元|同步原语
  5. 反编译C#代码来看看闭包到底是什么
  6. Leaflet:Path、Polyline、Polygon、Rectangle、Circle、CircleMarker
  7. 虚拟地址和物理地址(MMU)以及cache
  8. MySQL第四讲
  9. (第一章第六部分)TensorFlow框架之实现线性回归小案例
  10. CentOS安装时,软件选择(Software Selection)项介绍