欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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参数绑定的日记记录