springmvc获取传递参数的几种方式

1.基本传参方式

只要表单中input的name值和方法参数变量名一直就行。参数类型最好不要用基本数据类型,如果前端传递的参数是null或空字符串就会发生数据转换的异常,所以最好用包装类Integer等。当然也能用Pojo作为参数类型,只要参数值与属性名一一对应即可。比如:

模型对象:
public class User {
    private String firstName;
    private String lastName;
//getter、setter省略
}

Controller代码:
@RequestMapping("/user")
public void test(User user) {
}

表单:
<form action="saysth.do" method="post">
<input name="firstName" value="张" type="text"/>
<input name="lastName" value="三" type="text"/>
......
</form>

2.直接用HttpServletRequest获取

@RequestMapping("/") 
public String get(HttpServletRequest request, HttpServletResponse response) { 
   System.out.println(request.getParameter("a")); 
    return "helloWorld"; 
}

3.用注解@RequestParam绑定请求参数

@RequestMapping("/login")
   public String login(@RequestParam(value="age",required=false,defaultValue="24") String agenum){
       return "hello";
   }

 value属性匹配前台参数,required属性规定是否必须传值(默认为true),若为true且前台没传此参数则抛出异常。defaultValue规定此参数的默认值(存在此参数时,说明前台不是必要传值,required为false)

4.@PathVariable注解获取路径中的参数

@RequestMapping(value="user/{id}/{name}",method=RequestMethod.GET)
    public String printMessage1(@PathVariable String id,@PathVariable String name) {
        System.out.println(id);
        System.out.println(name);
        return "users";
    }

 方法参数变量名跟地址{}中的名称一致,当然不一定非要适用于get方法

5.@RequestBody

类似@ResponseBody,它就是将http请求的body部分作为String参数传入,经常用于接受ajax请求传递的json字符串。

@ResponseBody
    @RequestMapping(value = "/detail", method = RequestMethod.GET, produces = "application/json;charset=UTF-8")
    public Port detail(@RequestBody String param) {
    	JSONObject object = JSONObject.fromObject(param);
    	String id = object.getString("id");
    	Port port = iPortService.getPortDetail(id);
        logger.debug("port Info : " + port);
        return port;
    }

相关推荐