在请求的路径中传递参数:参数作为路径的一部分,可以在路径中直接使用
{paramName}来表示,另一种就是更加传统的表示方式?paramName=paramValue
@RequestMapping(value ="/test/path/{id}",method=RequestMethod.GET) public String testPath(@PathVariable String id){ System.out.println("路径中的参数:"+id); return "index"; } @RequestMapping(value="/test/param?name=jobs",method= RequestMethod.GET) public String testParam(@RequestParam(name="name") String name){ System.out.println("参数值是:"+name); return "index"; }
在对应的接受参数分别使用@PathVariable和@RequestParam
@pathVariable可以多次使用,它可以很好的支持int,long,Date数据类型,spring会帮我们自动去转换,转换失败时会抛出TypeMismatchException异常。当然如果这些基本的类型转换不能满足你的需求,spring还有其他可供类型转换的方法,这里不在这篇中讲。
路径中使用正则表达式的表示方法
由于本人对正则不熟悉,在这里就把官方文档中的说明直接拿过来,做个标记,知道有这么一种方式方法:
另一种方式,不解释:
它与HTTP请求中的request body对应
@RequestMapping(path = "/something", method = RequestMethod.PUT) public void handle(@RequestBody String body, Writer writer) throws IOException { writer.write(body); }
包请求中的参数封装成一个对象
@RequestMapping(method = RequestMethod.POST) public String processSubmit(@ModelAttribute("pet") Pet pet) { do something }
4. Controller中可以作为放回值的类型
我们这里只学习想常用的就可:
ModelAndView:这个似乎是以前最常用的,既有视图又有数据模型
Model:这个只返回数据模型,视图模型和你请求的对应
View:放回视图
Map:数据
List:数据
String:解析成放回视图
void:
把请求参数绑定到方法参数中。
@RequestMapping("/test/param") public String testRequestParam(@RequestParam("name") String name){ return "index"; }
表示在请求中有一个参数名为name的参数,通过注解把该参数的值和方法中的参数绑定,这样在方法参数中就可以获取用户的数据。
当然这样写的要注意一点,就是如果没有这个参数name的话系统会报错,解决的办法是:@RequestParam(value="name",required=false),可以使用是否是必传来做。
如果对于传入的参数个数不确定,可以使用Map<Stirng,String>或者MultiValueMap<String,String>来作为方法参数:
//不确定参数个数 @RequestMapping("/test/params") public String testRequestParam2(@RequestParam Map<String, String> params){ //params中放着所有的参数,一键值对的形式存在 return "index"; }
该注解通过注解一个方法,使得这个方法的返回值直接写到HTTP响应体中,而不同于放在模型(Model)中。
该注解和@RequestBody相识,相反。
//注解是方法返回值直接放到Http响应的报文体中 @RequestMapping("/test/retunBoyd") @ResponseBody public String testResponseBody(){ return "returnBody"; }
如果在你的@Controller注解的类中,方法都使用了@ResponseBody注解,那么你就可以修改该类使用RestController注解,所有方法去除@ResponseBody注解。
简单讲:@RestController = @Controller + @ResponseBody
不解释看图:
9.升级到3.0
设置web.xml配置文件使容器升级到3.0
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> ... </web-app>