springMVC参数绑定的日记记录
程序员文章站
2022-06-16 09:15:57
...
刚过完年,公司项目不是太忙,就趁着时间把经典的springMVC拿出来撸了撸,在参数绑定这一部分有了一些新收获,就拿来记录了一下。
工作中,常用到的应该是如下场景:
请求controller时这么写:http://localhost:8080/teayh/userInfo/showParams?price=2.0&username=test,后台controller接收时则是:
@Controller
@RequestMapping(value = "/userInfo")
public class UserController {
@RequestMapping(value = "showParams")
@ResponseBody
public JSONObject showParamsBind(HttpServletRequest req, HttpServletResponse rep, String price,String username) throws Exception {
}
}
这本身就是常用的参数绑定场景,这里要求方法的形参:String price,String username和请求的url的key一样才行,否则接收不到;而通过:String uname=req.getParameter("username");
也是一样可以获取到请求参数的。
但是如果请求参数username可以为空呢?price作为double类型使用,如上接收还有一次参数转化:
double p=double.parseDouble(price);
要做这些通过上面这些做法就有些难以实现,而参数绑定的其他的注解就可以实现这些做法;这里就直接贴代码了,对应的注释也写在里面了
/**
* springMVC的参数绑定
* @PathVariable绑定:@RequestMapping的{}内的参数可以绑定给@PathVariable后面接的变量:{id}绑定给了userid
* 使用时:http://localhost:8080/teayh/userInfo/showParams/1:可以获取到id的值
* @RequestParam绑定:绑定的请求参数{key=value类型的键值对}
* 使用时:http://localhost:8080/teayh/userInfo/showParams?price=2.0:可以获取到price
*@PathVariable和@RequestParam同时使用的时候:http://localhost:8080/teayh/userInfo/showParams/1?price=2.0
*
* */
@RequestMapping(value = "showParams/{id}")
@ResponseBody
public JSONObject showParamsBind(HttpServletRequest req, HttpServletResponse rep, @PathVariable("id") int userid, @RequestParam Double price,String username) throws Exception {
JSONObject returnValues=new JSONObject();
logger.info(">>>>>用户传入的编号是:"+userid+"<<<<<");
logger.info(">>>>>用户传入的用户名称是:"+username+"<<<<<");
String uname=req.getParameter("username");
logger.info(">>>>>请求参数用户名称是:"+uname+"<<<<<");
returnValues.put("code", userid);
returnValues.put("price", price);
returnValues.put("username", username);
returnValues.put("uname", uname);
return returnValues;
}
@PathVariable绑定的叫做:路径参数,无需请求的url当中存在key=value的这种,而是请求的uri后面接的路径showParams/1,这个1,就是{id}绑定的值,通过@PathVariable将值给到其所对应的userid
@RequestParam本身和在方法的形参上面直接使用参数是一样的,但是他可以有参数,详见RequestParam的源码:
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestParam {
String value() default "";
boolean required() default true;
String defaultValue() default "\n\t\t\n\t\t\n\ue000\ue001\ue002\n\t\t\t\t\n";
}
value:参数名字,即入参的请求参数名字,如username表示请求的参数区中的名字为username的参数的值将传入;required:是否必须,默认是true,表示请求中一定要有相应的参数,否则将报404;
defaultValue:默认值,表示如果请求中没有同名参数时的默认值。
@RequestParam(value="username", required=true, defaultValue="zhang") String username)
运行的日志如图示:
推荐阅读
-
一篇文章搞定SpringMVC参数绑定
-
springMVC获取requestMapping、restful风格中路径的参数
-
Android中的SQL查询语句LIKE绑定参数问题解决办法(sqlite数据库)
-
SpringMVC中控制器接收JSP页面表单的参数接收方式详解及细节注意(400错误)
-
记录spring-cloud-gateway获取post请求body参数,以及后端服务处理后的响应参数过程 gateway:2.2.0.RELEASE
-
Android一个小巧的记录app(便签或者日记 随心)
-
解决angular的post请求后SpringMVC后台接收不到参数值问题的方法
-
SpringMVC入门 -- 参数绑定
-
SpringMVC中利用@InitBinder来对页面数据进行解析绑定的方法
-
SpringMVC处理参数中的枚举类型通用实现