zoukankan      html  css  js  c++  java
  • Spring 梳理-接收请求的输入(原)

    1. Spring MVC 允许一下方式将客户端的数据传送到控制器的处理方法中
      1. 查询参数(Query Parameter)
      2. 表单参数(Form  Parameter)
      3. 路径变量(Path  Variable)
    2. 处理查询参数
      1. 不包含默认值
        1. @Controller
          @RequestMapping(value="/FirstControl")
          public class HelloControl {
              @RequestMapping("requestParam")
              public String viewRequestParam(@RequestParam("id") String id,@RequestParam("name") String  name,Model model){
                  DeptUserDomain dud=new DeptUserDomain();
                  dud.setId(id);
                  dud.setName(name);
                  model.addAttribute("dud",dud);
                  return "requestParam"; 
              }
          }
          <body>
          viewPersonInfo<br>
          ${dud.id}<br>
          ${dud.name}<br>
          ${dud.salary}
          </body>
          浏览器请求URL
          http://localhost:8085/testSpringMVC/FirstControl/requestParam?id=11&name=zs
      2. 包含默认值
        1. @Controller
          @RequestMapping(value = "/FirstControl")
          public class HelloControl {
              @RequestMapping("requestParam2")
              public String viewRequestParam2(@RequestParam(value="id",defaultValue="id2") String id ,@RequestParam(value="name",defaultValue="ls")String name,Model model){
                  DeptUserDomain dud = new DeptUserDomain();
                  dud.setId(id);
                  dud.setName(name);
                  model.addAttribute("dud", dud);
                  return "requestParam";
              }
          }
          <body>
          viewPersonInfo<br>
          ${dud.id}<br>
          ${dud.name}<br>
          ${dud.salary}
          </body>
          浏览器请求 URL
          
          http://localhost:8085/testSpringMVC/FirstControl/requestParam2
    3. 处理路径变量
      1. 从面向资源的角度,通过URL路径标识  优于 查询参数 的方式;例如 /domain/123   优于  /domain?id=123  ,后则描述的是一个带有参数的一个操作,本质上是通过HTTP发起的RPC
      2. PathVariable参数出现了3次
        @Controller
        @RequestMapping(value = "/FirstControl")
        public class HelloControl {
            @RequestMapping(value="/{id}")
            public String viewPathParam(@PathVariable("id")String id,Model model){
                DeptUserDomain dud = new DeptUserDomain();
                dud.setId(id);
                model.addAttribute("dud", dud);
                return "pathVariable";
            }
        }

        <body> viewPersonInfo<br> ${dud.id}<br> ${dud.name}<br> ${dud.salary} </body>
         浏览器请求路径
        http://localhost:8085/testSpringMVC/FirstControl/113
    4. 处理表单参数
      1. 一个表单,需要三个RequestMapping:原始输入表单(GET)、提交处理(POST)、结果重定向(Redirect)
      2. 在处理POST类型的请求时,请求处理完后,最好进行一下重定向,这样浏览器的刷新就不会重新提交表单了
      3. post提交对应的控制器方法,可接收POJO类型参数,POJO参数的属性将会使用请求Form中同名的参数进行填充
      4. InternalResourceViewResolver 可以识别前缀格式:  redirect:xxx       forward:xxx
      5. 校验表单:使用Java校验API(JSR,java Validation API)。包含在 javax.validation.constraints 包中
        1. 表单校验需要两步:
          1. 第一步:在POJO类上加上校验注解
          2. 第二步:在控制器方法参数上,添加@Valid,启用校验
        2. 在POJO上添加校验注解,并不能阻止表单提交,,校验失败信息存储在控制方法Errors参数上
        3. @Valid是定义在JSR-303标准中的,我这里使用的是Hibernate Validation对它的实现。这里我们必须使用@Valid标注我们需要校验的参数user,否则Spring不会对它进行校验。另外我们的处理器方法必须给定包含Errors的参数,这可以是Errors本身,也可以是它的子类BindingResult,使用了Errors参数就是告诉Spring关于表单对象数据校验的错误将由我们自己来处理,否则Spring会直接抛出异常,而且这个参数是必须紧挨着@Valid参数的,即必须紧挨着需要校验的参数,这就意味着我们有多少个@Valid参数就需要有多少个对应的Errors参数,它们是一一对应的
        4. 校验注解
          1. 限制

            说明

            @Null

            限制只能为null

            @NotNull

            限制必须不为null

            @AssertFalse

            限制必须为false

            @AssertTrue

            限制必须为true

            @DecimalMax(value)

            限制必须为一个不大于指定值的数字

            @DecimalMin(value)

            限制必须为一个不小于指定值的数字

            @Digits(integer,fraction)

            限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction

            @Future

            限制必须是一个将来的日期

            @Max(value)

            限制必须为一个不大于指定值的数字

            @Min(value)

            限制必须为一个不小于指定值的数字

            @Past

            限制必须是一个过去的日期

            @Pattern(value)

            限制必须符合指定的正则表达式

            @Size(max,min)

            限制字符长度必须在min到max之间

      6. @Controller
        @RequestMapping(value = "/FirstControl")
        public class HelloControl {
            @RequestMapping(value="/registerDeptUser",method=RequestMethod.GET)
            public String register(){
                
                return "registerDeptUser";
            }
            @RequestMapping(value="/registerDeptUser",method=RequestMethod.POST)
            public String register(DeptUserDomain dud){
                System.out.println("id:"+dud.getId());
                System.out.println("name:"+dud.getName());
                return "redirect:default";
            }
            @RequestMapping("/default")
            public String mydefault() {
                System.out.println("my first controller!!!");
                return "default";
            }
        }
        <html>
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <title>Insert title here</title>
        </head>
        <body>
            <form method="post">
                id:<input type="text" name="id" /><br /> name:<input type="text"
                    name="name" /><br /> <input type="submit" value="submit" />
            </form>
        </body>
        </html>
        信息: Server startup in 5055 ms
        id:id1id1
        name:name1
        my first controller!!!

  • 相关阅读:
    linux引导系统
    Android开发面试经——2.常见Android基础笔试题
    Android开发面试经——1.常见人事面试问题
    Android面试题整理【转载】
    android设置软键盘搜索键以及监听搜索键点击时发生两次事件的问题解决
    Android软键盘弹出时把布局顶上去的解决方法
    Android入门:绑定本地服务
    Android aidl Binder框架浅析
    Android LayoutInflater深度解析 给你带来全新的认识
    Android RecyclerView 使用完全解析 体验艺术般的控件
  • 原文地址:https://www.cnblogs.com/jiangtao1218/p/9740792.html
Copyright © 2011-2022 走看看