前端传到Controller:
方法1
通过HttpServletRequest 。
写法如下:
![3728e09574f984f4134adede10a42621.png](https://img-blog.csdnimg.cn/img_convert/3728e09574f984f4134adede10a42621.png)
HttpServletRequest类是Servlet中的类型,代表了一个Servlet请求。无论Post还是Get请求,都能通过这种方式获取到。
可以通过Post方法,使用Postman工具模拟一个post请求,都可以将值传到Controller。
这招可以获得Cookie以及Session数据。
还可以通过注解@Autowired,将HttpServletRequest 自动的注入进来,不必担心多线程下的并发问题,因为这里HttpServletRequest注入的是一个AOP proxy ,而不是一个普通bean 。每次请求过来,都会检查线程本地属性,来获取真正的Request对象。这些都是Spring自动配置的默认场景。
但是不推荐使用这个方法,因为这种方法破坏了对一个注入对象的常规理解,造成混乱。
代码如下:
![bc0689f2f4119967b46c1dc9375726df.png](https://img-blog.csdnimg.cn/img_convert/bc0689f2f4119967b46c1dc9375726df.png)
方法2
使用路径变量。
写法如下:
![a8f65872a08d78075be3005b40a85606.png](https://img-blog.csdnimg.cn/img_convert/a8f65872a08d78075be3005b40a85606.png)
@RequestMapping中的{}中即为路径变量,该变量还需要在方法的参数值出现,并且标记@PathVariable。
通过URL匹配的方式既可以实现传值,这是REST风格的一种传值方式。
上面的例子,只需输入URL:
http://127.0.0.1:8080/WebApp/print/ZhangSan/30
controller接收到传值,输出:
name:ZhangSan
age:30
@RequestMapping("/print/{name}/{age}")是@RequestMapping(Value="/print/{name}/{age}")的缩写形式,本质上是一样的。
方法3
参数名匹配的方式:
![21c8aa0d4bed5e978ec0cb4301d831a0.png](https://img-blog.csdnimg.cn/img_convert/21c8aa0d4bed5e978ec0cb4301d831a0.png)
或者:
![38a2f18cb4db488ee64480ea5e0b2b86.png](https://img-blog.csdnimg.cn/img_convert/38a2f18cb4db488ee64480ea5e0b2b86.png)
当请求传入的参数名字和controller
中代码的名字一样的时候,两种方式都可以,区别在于使用了注解@RequestParam,可以设置一个默认值来处理到null值。
@RequestParam(value=“name”, defaultValue=“John”)
但是如果请求中参数的名字和变量名不一样的时候,就只能使用@RequestParam注解。
Controller代码只能如下的写法
@RequestMapping(value="/print")
public String PrintInfo(@RequestParam(“user_name”) String name, @RequestParam(“user_age”)int age) {
…
}
尽量使用@RequestParam注解,因为这样可以清晰的知道该参数来自Request,可读性高。
方法4
传递请求头中的参数,需要用到@RequestHeader注解,该注解将Header中的值绑定到参数上,可以获取一个,多个或者所有的参数。
例如
![6e637b0d77590fa7c5ebe9c2380642d9.png](https://img-blog.csdnimg.cn/img_convert/6e637b0d77590fa7c5ebe9c2380642d9.png)
或者
![43785fdb2ab7a57518962c9919ca3e22.png](https://img-blog.csdnimg.cn/img_convert/43785fdb2ab7a57518962c9919ca3e22.png)
方法5
使用到@RequestBody注解,得到整个RequestBody的信息
![bad025770ee2aceebb218f3dc8f10752.png](https://img-blog.csdnimg.cn/img_convert/bad025770ee2aceebb218f3dc8f10752.png)
@RequestBody可以将Json数据直接映射程Java对象。例如:
方法6
采用@ModelAttribute注解,命名匹配,Post中的参数值和Model中的参数值一致的话,会自动绑定到该值。
![f23932a00709c1764348a2349018bd78.png](https://img-blog.csdnimg.cn/img_convert/f23932a00709c1764348a2349018bd78.png)
然后当Post的值中有name和age时,Controller中的user对象会自动附上值。
Controller传递到JSP
方法1
使用ModelAndView类,代码如下:
![8623a63afa64ca14d9e4942384cf8bd0.png](https://img-blog.csdnimg.cn/img_convert/8623a63afa64ca14d9e4942384cf8bd0.png)
JSP页面中:
![46018ddc4dee4d68a5d5df07f62293ba.png](https://img-blog.csdnimg.cn/img_convert/46018ddc4dee4d68a5d5df07f62293ba.png)
ModelAndView 初始化的时候,设置了view的名字,同时也把对象存起来,直接传给view。简单实用。
方法2
使用Model或者ModelMap
(Model是一个接口,ModelMap实现了Model接口)
该方法和ModelAndView方法相似,只是Model和View分开来了,通过返回一个String来找到View,Model是注入到Controller的一个参数,通过对它添加属性,在jsp端读取值。代码如下:
![e4241b5ce024fecda4facfc70d91f431.png](https://img-blog.csdnimg.cn/img_convert/e4241b5ce024fecda4facfc70d91f431.png)
JSP页面中:
![43bd82b59ff9cecdc2135c6d2ea1a0de.png](https://img-blog.csdnimg.cn/img_convert/43bd82b59ff9cecdc2135c6d2ea1a0de.png)