A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 大蓝鲸小蟀锅 于 2020-3-11 21:16 编辑

SpringMVC参数绑定

一、普通方式
1.基本数据类型
​        int等
2.包装数据类型
​        Integer等  ,区别在于 包装类型的值可以是null或""
3. POJO类型
包括自定义POJO类型(包装POJO,复杂POJO)
POJO内又有其他POJO,见代码
POJO:
[Java] 纯文本查看 复制代码
public class A{
    private String a;
    private B b;
}
public class B{
    private String bb;
}
Controller:
[Java] 纯文本查看 复制代码
@RequestMapping("/")
public void test(A a) {
}
JSP:
[Java] 纯文本查看 复制代码
<input name="a" value="" /><br>
<input name="b.bb" value="" /><br>

4. List类型
​        必须是属性,不能直接作为参数接收
POJO:
[Java] 纯文本查看 复制代码
public class A{
    private String a;
    private List<B> b;
}
public class B{
    private String bb;
}
Controller:
[Java] 纯文本查看 复制代码
@RequestMapping("/")
public void test(A a) {
}

JSP:
[Java] 纯文本查看 复制代码
<input name="a" value="" /><br>
<input name="b[0].bb" value="" /><br>

5. Set类型
雷同List,只是要提前定义好有多少条, 前端传值注意,如果下标超过也会报错
POJO:
[Java] 纯文本查看 复制代码
public class A{
    private String a;
    private Set<B> b = new HashSet<B>();
    public A() {
          b.add(new B());
          b.add(new B());
          b.add(new B());
      }
}
public class B{
    private String bb;
}

6. Map类型
POJO:
[Java] 纯文本查看 复制代码
public class A{
    private String a;
    private Map<String,B> b;
}
public class B{
    private String bb;
}

Controller:
[Java] 纯文本查看 复制代码
@RequestMapping("/")
public void test(A a) {
}
JSP:
[Java] 纯文本查看 复制代码
<input name="a" value="" /><br>
<input name="b['xxx']" value="" /><br>
<input name="b['yyy']" value="" /><br>
<input name="b['zzz']" value="" /><br>

二、注解方式
1.@PathVariable
可以在类上面,也可以在方法上面
[Java] 纯文本查看 复制代码
@Controller  
@RequestMapping("/test/{path1}")  
public class TestController {  

@RequestMapping("/pets/{path2}")  
public void testPathVariable(@PathVariable String path1, @PathVariable String path2) {      }  
} 

2.@RequestHeader、@CookieValue
直接将请求头的部分值或者cookie的值映射上去
[Java] 纯文本查看 复制代码
[/align]@RequestMapping("/test")  
public void test(@RequestHeader("Content-Type") String test)  {  
}  
​
@RequestMapping("test")  
public void test(@CookieValue("cookieTest") String cookieTest)  {  
} 

3. @RequestParam, @RequestBody
@RequestParam 用来处理Content-Type: application/x-www-form-urlencoded的请求参数
@RequestBody用来处理不是Content-Type: application/x-www-form-urlencoded的请求参数
[Java] 纯文本查看 复制代码
@RequestMapping("/test")  
public void test(@RequestParam("t") String test) throws IOException{
    
}
​
@RequestMapping("/test")  
public void test(@RequestBody String test) throws IOException{
    
}

4. @SessionAttributes, @ModelAttribute
[Java] 纯文本查看 复制代码
@Controller  
@SessionAttributes("sessionTest")  //也可以是多个 {"sessionTest1","sessionTest2"}
public class testController {  
  
  @RequestMapping("/test")  
  public void test(Model model) throws IOException{
    model.addAttribute("sessionTest",1);
  }
}  
​
@Controller  
@SessionAttributes("sessionTest")
public class testController{  
  
  @RequestMapping("/test")  
  public void test(@ModelAttribute("sessionTest") String sessionTest){ 
  }  
}  

SpringMVC常见注解
1. @Controller
2. @RequestMapping
a、 value, method
value:     指定请求的实际地址,指定的地址可以是URI Template 模式(/test/{path1}; /test/*;/test/正则表达式)
method:  指定请求的method类型, GET、POST、PUT、DELETE等;
b、consumes,produces
consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
produces:    指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
c、params,headers
params: 指定request中必须包含某些参数值是,才让该方法处理。
headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。
[Java] 纯文本查看 复制代码
@RequestMapping (
  value= "testHeaders", 
  method= {RequestMethod.GET, RequestMethod.DELETE},
  headers={"host=localhost", "Accept"},
  consumes="application/json",
  produces="application/json"
)
public String testHeaders() {
  return "headers" ;
}

3.参考注解绑定参数,都是springmvc常用注解

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马