内容简介:在MVC结构中,控制器组件主要的功能就是接收请求、处理请求、生成响应,接收客户端传来的请求参数的往往是控制器要做的第一件事。Book实体类客户端界面(表单):
Spring MVC常用客户端参数接收方式
在MVC结构中,控制器组件主要的功能就是接收请求、处理请求、生成响应,接收客户端传来的请求参数的往往是控制器要做的第一件事。
Book实体类 Book.java
public class Book {
private Integer bookId;
private String author;
//生成Get、Set方法,此处省略
}
一、直接用参数名匹配请求参数
客户端界面(表单):
<form action="/queryString" method="post">
<input type="text" name="bookId">
<input type="text" name="author">
<input type="submit" value="提交">
</form>
controller层:
@Controller
public class ParamPassDemo {
@RequestMapping(value="/queryString")
public String test1(Integer bookId, String author) {
System.out.println("bookId="+bookId+", author="+author);
//此处返回的地址为(/WEB-INF/jsp/index.jsp)
return "index";
}
}
注意:这里 @RequestMapping
中只有value属性,value可以省略不写。
客户端输入:123,Rose
控制台输出:bookId=123, author=Rose
二、通过@RequestParam注解来指定请求参数的name
客户端界面(表单):
<form action="/queryStringWithSpecName" method="post">
<input type="text" name="bookId" value="321">
<input type="text" name="author" value="Jack">
<input type="submit" value="提交">
</form>
如果表单中的字段与方法中的参数名一致,可以不需要@RequestParam,Spring会自动处理。
controller层:
@Controller
public class ParamPassDemo {
@RequestMapping("/queryStringWithSpecName")
public String test2((value="bookId",required=false) Integer id, @RequestParam("author") String name) {
System.out.println("bookId="+id+", author="+name);
return "index";
}
}
注意:这里 @RequestMapping
中有两个属性,value不能省略。
@RequestParam将请求地址中的参数传递给目标方法,在处理方法入参处使用可以把请求参数传递给请求方法。
当使用@RequestParam注解时,设置客户端传递的请求参数 name="bookId"
和@RequestParam的value值 value="bookId"
相匹配后,参数名 int id
可以和请求参数不匹配。
客户端输入:321, Jack
控制台输出:bookId=321, author=Jack
客户端界面(ajax):
<button onclick="clickMe()">点我</button>
<script>
function clickMe() {
$.ajax({
type : 'POST',
url : "/queryStringWithSpecName",
data : {
"bookId" : 1,
"author" : "Jack"
},
});
}
</script>
controller层:(不变)
客户端: data:{"author" : "Jack"}
控制台输出: bookId=null, author=Jack(如果bookId为int类型,控制台会抛出异常)
客户端: data:{"bookId" : 1}
控制台输出: org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'author' is not present
通过 required
设置可选参数, required
为 false
时表示可以不带参数,为 true
时表示必须带参数(默认值为true)。
当可选参数不存在时,Spring默认将其赋值为空(null),但由于bookId已定义为基本类型int,所以赋值会失败。 解决方法:采用int包装类Integer。
三、使用领域对象来接收参数
客户端界面(表单):
<form action="/queryStringWithDomainObj" method="post">
<input type="text" name="bookId">
<input type="text" name="author">
<input type="submit" value="提交">
</form>
controller层:
@Controller
public class ParamPassDemo {
@RequestMapping("/queryStringWithDomainObj")
public String test3(Book book) {
System.out.println("bookId="+book.getBookId()+", author="+book.getAuthor());
return "index";
}
}
客户端输入:111, Bob
控制台输出:bookId=111, author=Bob
四、URL动态参数传递(路径参数)
客户端界面(超链接):
<a href="/book/1">testPathVariable</a>
controller层:
@Controller
public class ParamPassDemo {
//@PathVariable可以用来映射URL中的占位符到目标方法的参数中
@RequestMapping("/book/{bookId}")
public String test4(@PathVariable("bookId") Integer bookId) {
System.out.println("bookId:" + bookId);
return "index";
}
}
控制台输出:bookId:1
@PathVariable 映射 URL 绑定的占位符
通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过@PathVariable(“xxx“) 绑定到操作方法的入参中。
五、使用HttpServletRequest获取请求参数
客户端界面(表单):
<form action="/queryBook" method="post">
<input type="text" name="bookId">
<input type="text" name="author">
<input type="submit" value="提交">
</form>
controller层:
@Controller
public class ParamPassDemo {
@RequestMapping("/queryBook")
public String test5(HttpServletRequest request) {
System.out.println("bookId:" + request.getParameter("bookId"));
//此处index.jsp界面在WEB-INF下
return "redirect:/index.jsp";
}
}
客户端输入:123
控制台输出:用户id:123
六、跳转到另一个controller方法
客户端界面(url地址栏):
http://localhost:8080/test6?bookId=321
controller层:
@Controller
public class ParamPassDemo {
@RequestMapping("/test6")
public String test6(String bookId){
System.out.println("bookId="+bookId);
//使用服务端跳转的方式转向到另一个controller
//return "forward:queryBook?bookId="+bookId;
return "redirect:queryUser?bookId="+bookId;
}
}
控制台输出:bookId=321 bookId:321
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 【每日一贴】行情接收客户端EzSR
- 关于在接收POST请求,Tomcat偶发性接收到的参数不全问题排查分析
- 异步接收MSMQ消息
- 如何突破商品期货Tick接收限制
- SpringMVC接收和响应json数据
- 如何使用 jq 接收 blob 数据
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Out of their Minds
Dennis Shasha、Cathy Lazere / Springer / 1998-07-02 / USD 16.00
This best-selling book is now available in an inexpensive softcover format. Imagine living during the Renaissance and being able to interview that eras greatest scientists about their inspirations, di......一起来看看 《Out of their Minds》 这本书的介绍吧!