为了账号安全,请及时绑定邮箱和手机立即绑定

SpringMVC框架接收请求参数处理(二)

标签:
Java SSM Spring

1.1. 【不推荐】通过HttpServletRequest

在处理请求的方法中,添加HttpServletRequest对象作为参数,在方法体中,直接调用参数对象的getParameter()或类似功能的方法,即可获取请求参数:

@RequestMapping("handle_reg.com")

public String handleReg(HttpServletRequest request) {

    System.out.println("UserController.handleReg()");

    String username = request.getParameter("username");

    String password = request.getParameter("password");

    Integer age = Integer.valueOf(request.getParameter("age"));

    String phone = request.getParameter("phone");

    String email = request.getParameter("email");

    System.out.println("username=" + username);

    System.out.println("password=" + password);

    System.out.println("age=" + age);

    System.out.println("phone=" + phone);

    System.out.println("email=" + email);

    return null;

}

1.2. 【推荐】在处理请求的方法中声明同名参数

假设用户提交的参数是username=root,则参数名是username,当需要获取这个参数的值时,直接在处理请求的方法中声明String username即可,框架会把root值直接用于调用处理请求的方法,即String username的值就已经是root了:

@RequestMapping("handle_reg.com")

public String handleReg(

        String username, String password,Integer age, String phone, String email) {

    System.out.println("[2] username=" + username);

    System.out.println("[2] password=" + password);

    System.out.println("[2] age=" + (age + 1));

    System.out.println("[2] phone=" + phone);

    System.out.println("[2] email=" + email);   

    return null;

}

使用这种做法时,可以无视数据类型,例如希望age是Integer类型的,则直接声明为Integer类型即可,无须自行转换!

使用这种做法时,必须保证提交的请求参数的名称,与处理请求的方法中的参数名称是一致的!如果不一致,则处理请求的方法中,对应的参数值会是null值!

如果参数名称无法统一,后续有解决方案(使用@RequestParam注解)。

这种做法最大的缺陷是:不适用于数据项目太多的表单!否则,会导致处理请求的方法中需要添加大量的参数!

1.3. 【推荐】使用自定义类型获取多项数据

假设请求参数中包含多项数据,例如:username=admin&password=123456&age=22&phone=13900139001&email=admin%40tedu.cn,而这些数据都可以封装在同一个类型中,则直接使用该类型作为处理请求的参数即可:

@RequestMapping("handle_reg.com")

public String handleReg(User user) {

    System.out.println("[3] username=" + user.getUsername());

    System.out.println("[3] password=" + user.getPassword());

    System.out.println("[3] age=" + (1 + user.getAge()));

    System.out.println("[3] phone=" + user.getPhone());

    System.out.println("[3] email=" + user.getEmail());

    return null;

}

这种做法,适用于请求参数较多的场合!

注意:如果请求参数的参数名称,与类中的属性名称不一致,则类对象中对应的属性值为null!

注意:这种做法可以与前序介绍的第2种做法组合来使用!

1.4. 小结

关于获取请求参数,首先,并不推荐使用HttpServletRequest,主要原因是相对比较原始,编码比较繁琐!而声明同名参数,或声明对象,都是推荐的做法,至于使用哪一种,可以根据参数的数量及数据是否适合被封装到同一个类中,综合评定,并且,这2种做法可以组合使用!

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
1
获赞与收藏
9

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消