Spring MVC @RequestParam
来源:原创 发布时间:2015-03-22 归档:springmvc
开发环境 :
JDK 7
Maven 3
Tomcat 7
Spring 4.1.5
Eclipse Luna
@RequestParam 注解用于绑定请求中的参数到处理方法的参数中。
示例代码片段 1
@Controller
@RequestMapping("/product")
public class ProductController {
@RequestMapping(value = "/find", method = GET)
public String find(Model model, @RequestParam int id) {
model.addAttribute(MESSAGE, id);
return RESULT_PAGE;
}
@RequestMapping(value = "/modify", method = GET)
public String modify(Model model, @RequestParam Integer id) {
model.addAttribute(MESSAGE, id == null ? "null" : id);
return RESULT_PAGE;
}
}
@RequestParam 注解标注的参数默认是必须的 ( required = true ), 不可缺省。
就基本数据类型而言, 其值要求是必须的, 如果允许空值, 需要用包装类型来替代 ( required = true )。
GET /product/find?id=31100042 --> find --> 31100042
GET /product/find?id --> 400 Error ( Bad Request )
GET /product/find?id= --> 400 Error ( Bad Request )
GET /product/modify?id --> modify --> null
GET /product/modify?id=31100042 --> modify --> 31100042
示例代码片段 2
就基本数据类型而言, 其值要求是必须的, 如果允许空值, 需要用包装类型来替代 ( required = true )。
GET /product/find?id=31100042 --> find --> 31100042
GET /product/find?id --> 400 Error ( Bad Request )
GET /product/find?id= --> 400 Error ( Bad Request )
GET /product/modify?id --> modify --> null
GET /product/modify?id=31100042 --> modify --> 31100042
@Controller
@RequestMapping("/product")
public class ProductController {
@RequestMapping(value = "/search", method = GET)
public String search(Model model, @RequestParam("name") String productName) {
model.addAttribute(MESSAGE, productName);
return RESULT_PAGE;
}
}
若处理方法的参数名与绑定的请求的参数名称不一致, 需要在处理方法中用 value 注解显式的指明绑定的请求的参数的名称。
GET /product/search?name=books&type=it --> search --> books
示例代码片段 3
GET /product/search?name=books&type=it --> search --> books
@Controller
@RequestMapping("/product")
public class ProductController {
@RequestMapping(value = "/add", method = GET)
public String add(Model model, @RequestParam(required = false) int id) {
model.addAttribute(MESSAGE, id);
return RESULT_PAGE;
}
@RequestMapping(value = "/edit", method = GET)
public String edit(Model model, @RequestParam(required = false) Integer id) {
model.addAttribute(MESSAGE, id == null ? "null" : id);
return RESULT_PAGE;
}
}
required :
用于表明请求参数是否是必须的。默认值为 true。
若为 required = false, 且请求没有提供参数, 则使用 null 作为参数的值, 这就要求参数类型不能是基本数据类型, 否则报 500
GET /product/add --> 500 Error
GET /product/add?id=31100042 --> add --> 31100042
GET /product/edit --> edit --> null
GET /product/product/edit?id=31100042 --> edit --> 31100042
示例代码片段 4
用于表明请求参数是否是必须的。默认值为 true。
若为 required = false, 且请求没有提供参数, 则使用 null 作为参数的值, 这就要求参数类型不能是基本数据类型, 否则报 500
GET /product/add --> 500 Error
GET /product/add?id=31100042 --> add --> 31100042
GET /product/edit --> edit --> null
GET /product/product/edit?id=31100042 --> edit --> 31100042
@Controller
@RequestMapping("/product")
public class ProductController {
@RequestMapping(value = "/obtain", method = GET)
public String obtain(Model model, @RequestParam(defaultValue = "desc") String sort) {
model.addAttribute(MESSAGE, "sort by " + sort);
return RESULT_PAGE;
}
@RequestMapping(value = "/select", method = GET)
public String select(Model model, @RequestParam(defaultValue = "${default.amount}") int amount) {
model.addAttribute(MESSAGE, "select " + amount + " records");
return RESULT_PAGE;
}
@RequestMapping(value = "/fetch", method = GET)
public String fetch(Model model, @RequestParam(defaultValue = "${default.food}") String food) {
model.addAttribute(MESSAGE, "food is " + food + ", default is fruit");
return RESULT_PAGE;
}
}
defaultValue :
当请求中没有提供参数或参数的值为空 ( "" ), 则使用 defaultValue 注解的值 ( 支持 SpEL )。相当于隐式的设置了 required = false。
product.properties
当请求中没有提供参数或参数的值为空 ( "" ), 则使用 defaultValue 注解的值 ( 支持 SpEL )。相当于隐式的设置了 required = false。
default.amount = 10 default.food = fruit
GET /product/obtain --> obtain --> desc
GET /product/obtain?sort --> obtain --> desc
GET /product/obtain?sort=asc --> obtain --> asc
GET /product/select --> select --> 10
GET /product/select?amount=15 --> select --> 15
GET /product/fetch --> fetch --> fruit
GET /product/fetch?food=vegetable --> fetch --> vegetable
示例代码片段 5
GET /product/obtain?sort --> obtain --> desc
GET /product/obtain?sort=asc --> obtain --> asc
GET /product/select --> select --> 10
GET /product/select?amount=15 --> select --> 15
GET /product/fetch --> fetch --> fruit
GET /product/fetch?food=vegetable --> fetch --> vegetable
@Controller
@RequestMapping("/product")
public class ProductController {
@RequestMapping(value = "/query", method = GET)
public String query(Model model, @RequestParam Map<String, Object> params) {
model.addAttribute(MESSAGE, params);
return RESULT_PAGE;
}
@RequestMapping(value = "/seek", method = GET)
public String seek(Model model, @RequestParam MultiValueMap<String, Object> params) {
model.addAttribute(MESSAGE, params);
return RESULT_PAGE;
}
}
当 @RequestParam 注解标注在 Map 或 MultiValueMap 类型参数上时 ( 参数名任意 ), 该参数包含所有请求的参数。
GET /product/query?type=it&name=java --> query --> {type=it, name=java}
GET /product/seek?province=guangdong&county=maoming --> seek --> {province=[guangdong], county=[maoming]}
示例代码片段 6
GET /product/query?type=it&name=java --> query --> {type=it, name=java}
GET /product/seek?province=guangdong&county=maoming --> seek --> {province=[guangdong], county=[maoming]}
@Controller
@RequestMapping("/product")
public class ProductController {
@RequestMapping(value = "/delete", method = GET)
public String delete(Model model, @RequestParam int[] ids) {
model.addAttribute(MESSAGE, "delete where id in " + Arrays.toString(ids));
return RESULT_PAGE;
}
@RequestMapping(value = "/remove", method = GET)
public String remove(Model model, @RequestParam("ids") int[] productIds) {
model.addAttribute(MESSAGE, "remove where id in " + Arrays.toString(productIds));
return RESULT_PAGE;
}
@RequestMapping(value = "/update", method = GET)
public String update(Model model, @RequestParam List<Integer> ids) {
model.addAttribute(MESSAGE, "update where id in " + ids);
return RESULT_PAGE;
}
}
用数组或集合类型绑定请求参数, 请求参数的值用 "," 分隔即可。
GET /product/delete?ids=31100042,31100043 --> delete --> [31100042, 31100043]
GET /product/remove?ids=31100044,31100045 --> remove --> [31100044, 31100045]
GET /product/update?ids=31100046,31100047 --> update --> [31100046, 31100047]
GET /product/delete?ids=31100042,31100043 --> delete --> [31100042, 31100043]
GET /product/remove?ids=31100044,31100045 --> remove --> [31100044, 31100045]
GET /product/update?ids=31100046,31100047 --> update --> [31100046, 31100047]
示例代码下载