SpringMVC---数据传入与输出

一、数据传入部分

1、RequestMapping注解:

	@RequestMapping(value = "请求的URL",params = {"限定传入的参数"},method="限定方法类型",headers="限定请求头")


2、路径数据部分:

	<a href="method2/100">测试请求头</a><br><br>
	

	 @RequestMapping("{m}/{pid}")
	    public String method1(@PathVariable("pid") String id,
	                          @PathVariable("m") String method) {
	        System.out.println(method + "/" + id);
	        return "resp";
	    }

       一个占位符可以占一层路径。可以将所有路径都用占位符占住,但是如有多个和URL匹配的方法就会报错(SpringMVC框架会尽量避免这种情况,当避无可避的时候就凉凉)。
可以通过@PathVariable注解来取到占位符上的真正路径,value可以省略,如果省略则后面的变量名必须和占位的变量名相同。当找不到的时候,会报错,除非将required设置为false。

运行结果:
Alt

3、携带参数:

	<a href="method1/100?username=abc">测试请求参数</a><br><br>
	
	
	 @RequestMapping("{m}/{pid}")
    public String method1(@PathVariable("pid") String id,
                          @PathVariable("m") String method,
                          @RequestParam(value = "user", required = false) String username) {
        System.out.println(method + "/" + id + "?username=" + username);
        return "resp";
    }

       当以get方式携带请求参数的时候,用@RequestParam来取到传入的参数值,value可以省略,如果省略则后面的变量名必须和传入的参数名相同。当找不到的时候,会报错,除非将required设置为false。

4、传入Servlet的原生API:

	<a href="method2/100?username=abc">测试请求头</a><br><br>

	@RequestMapping("method2/{pid}")
	    public String method2(@PathVariable("pid") String id,
	                          @PathVariable(value = "m", required = false) String method,
	                          @RequestHeader("user-agent") String heads,
	                          HttpServletRequest request) {
	        System.out.println("method2/" + id + "?user-agent=" + heads + "&username=" + request.getParameter("username"));
	        return "resp";
	    }

运行结果:
Alt

5、POJO的自动封装(需要配置CharacterEncodingFilter):

       自定义的对象,SpringMVC会根据表单的name和实体类中的变量名进行一对一映射,全找到就自动封装。

	<form action="order" method="post">
	    物品名字: <input type="text" name="productName"><br>
	    物品数量: <input type="text" name="productQuantity"><br>
	    物品总价: <input type="text" name="totalPrice"><br>
	    用户姓名: <input type="text" name="address.userName"><br>
	    用户收货地址: <input type="text" name="address.location"><br>
	    用户手机: <input type="text" name="address.mobile"><br>
	    <input type="submit" value="提交">
	</form>
	
	
	@RequestMapping("order")
	    public String method3(Order order) {	//还支持级联的自动封装
	        System.out.println(order);
	        return "resp";
	    }

运行结果:
Alt

二、数据输出部分

Map、Model、ModelMap:

	<a href="method1">测试Map输出数据</a><br><br>
    <a href="method2">测试Model输出数据</a><br><br>
    <a href="method3">测试ModelMap输出数据</a><br><br>


	@Controller
	public class OutController {
	    @RequestMapping("method1")
	    public String method1(Map<String,Object> map) {
	        map.put("param","这是方法一");
	        return "showparam";
	    }
	
	    @RequestMapping("method2")
	    public String method2(Model model) {
	        model.addAttribute("param","这是方法二");
	        return "showparam";
	    }
	
	    @RequestMapping("method3")
	    public String method3(ModelMap modelmap) {
	        modelmap.addAttribute("param","这是方法三");
	        return "showparam";
	    }
	}
	

	pageContext: ${pageScope.param}<br><br>
	request: ${requestScope.param}<br><br>
	session: ${sessionScope.param}<br><br>
	application: ${applicationScope.param}<br><br>

运行结果:
Alt Alt Alt

SpringMVC确定POJO值的三步;
       1、如果隐含模型中有这个key(标了ModelAttribute注解就是注解指定的value,没标就是参数类型的首字母小写)指定的值,如果有将这个值赋值给bindObject
       2、如果是SessionAttributes标注的属性,就从session中拿;
       3、如果都不是就利用反射创建对象;

当Map、Model、ModelMap这三个传递输出数据的时候,总会变成隐含模型BindingAwareModelMap。这个隐含模型可不得了,很牛逼的!

发布了33 篇原创文章 · 获赞 5 · 访问量 2284

猜你喜欢

转载自blog.csdn.net/cj1561435010/article/details/104042138
今日推荐