SpringMVC映射的前端后台数据交互总结

由于最近在开发项目模块时候,总会涉及到前端后台数据交互过程。其实我们在处理程序时候,无论是框架,实现和逻辑都是以数据为基础的。并且,开发的又是web项目,那当然会涉及到前端和后台的交互了。总而言之,弄清楚数据的流动过程至关重要。我们需要处理的也是数据,所以,若是把数据流的产生,到中间处理,到最后的展示,也可以联系MVC来理解,这个过程都掌控好的时候,开发效率和思路也会清晰很多。所以,来总结总结springmvc中requestmapping参数的时候,和一些前端后端表单交互方式的总结。

springmvc中requestmapping如何使用?

由于最近在使用springmvc,所以将一些基础内容总结总结,特别是requestmapping这个注解参数。它是我们映射参数的处理器,将处理和路由不同的http请求和参数映射。spring这个轮子使用起来还是挺方便的,也很强大,拓展伸缩力也挺灵活,对我们日常开发有事半功倍效果。并且,现在的项目开发为了规范代码风格和”约定大于配置”的理念也在不断影响我们,很多公司的后台接口都是按照RESTFUL风格来设计与实现。

因为我们的web项目都是基于HTTP协议的,在应用程上数据的点对点的传输和请求,无外乎就是HTTP的那几种请求类型,如GET,POST,PUT等等。所以,springmvc也对REST风格开发中这几种HTTP请求方法有定义与实现。因为在B/S架构上的软件大多都是离不开http协议的。所以,在细化到一个java中的一个controller类,该类就相当于一个很大的停车场吧(是在想不到什么好的场景了),将轿车,卡车,赛车等几种不同类型的车分别映射成http的GET,POST,PUT请求。若是将汽车停车这个过程比喻成一个http请求的话:
我们车主就是发送请求端,停车场就是服务端。
车的类型式属于轿车还是卡车,还是赛车就相当于是什么类型的请求了:假设我们是开着轿车去XX停车场停车(这就是一个http请求)。轿车对应GET请求,然后将车开到轿车停车区域,在结合轿车牌子,汽车车型(请求参数),找到了停车位(相当于找到了某个controller类的处理方法method)。
将车子停在具体车位后,停车位管理员给予停车卡,车主拿到卡就可以走了(就相当于请求处理完成,返回数据了)。

我们就可以将requestMapping这个注解参数比喻成停车场管理员,他职责就是结合你的车子种类(Htpp请求类型),车型,大小,牌子(请求参数)等等,决定停车在那一个停车区位置(处理方法),最后停车完成,也就相当于处理完成了。所以,requestMapping的作用是很大的。下面来看看该注解参数的具体用法:

@RequestMapping: 是用来处理一个请求地址映射的注解,可用于类或者方法上。用于类上:表示类中的所有方法请求都是以该参数value值中内容作为父路径;用于方法上则是映射到具体的URI参数了。

我就把RequestMapping的主要六个注解来分别看看,并大致将它们分成了3类说明:
+ Value,method:
value: 指定请求的实际地址,也就是想http uri中的请求参数是什么内容,才能跳入调用这个方法。
method: 指定HTTP请求的method类型:GET,POST,PUT,DELETE等。

eg: 我若是想让以GET方式请求的http请求,并且它uri中包含test/getValue.do结尾,调用getValue方法,那么可以这样定义:

@RequestMapping(value="/test/getValue.do",method=RequestMethod.GET)
public String getValue(){...}
  • consumes,produces:
    consumes: 指定处理http请求的提交内容类型(也就是HTTP头中的Content-Type参数),eg:application/json,text/html;也就是说,若是希望方法method处理的是json类型数据,那么就要求客户端提交过来到这个方法的请求参数是json类型。
    produces: 指定该方法处理后返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回。这句话意思就是,若是客户端可以接收text/html;application/json等类型的数据类型,那么我服务器端才在该函数处理完数据后,以这些格式将数据封装返回浏览器。

  • params,headers:
    params: 指定request请求中必须包含某些参数值,才让该方法处理。
    headers: 指定request中必须包含某些指定的header值,才让该方法处理。

下面来个具体点的例子:
1.value,method:就拿一个用户类的增删改查就行了,也就对应了http的POST,DELETE,PUT,GET方法了。


@Controller
@RequestMapping("/user")    //下面方法若是想调用,uri中都必须在/user/...后
public class UserController {
   
    @Autowired
    private UserService userService;

    /*
    * 添加用户。
    * POST类型的../user/add.do请求uri调用该方法。
    */
    @RequestMapping(value = "/add.do",method=RequestMethod.POST)  
    public String addUser(HttpServletRequest request,HttpServletResponse response){
        int iRetVal = 0;
        String nickname = request.getParameter("nickname");
        String state = request.getParameter("state");
        User user = new User();
        user.setNickname(nickname);
        user.setState(Integer.valueOf(state));
        iRetVal = userService.insertUser(user);
        return ResponseUtil.ajax(String.valueOf(iRetVal).toLowerCase(),response,"text/html");
    }

    /*
    * 根据id查询用户
    * GET类型的 ../user/sid/10 请求调用该方法。
    * 类似这种 /{param1}/{param2}..的uri请求,那么就可以使用@PathVariables参数对路径参数进行映射封装。
    */
    @RequestMapping(value = "/sid/{sid}",method=RequestMethod.GET)  
    public ModelAndView getUserById(@PathVariable String sid){ //sid参数对应方法上的路径参数{sid}
        ModelAndView mv = new ModelAndView("stulist");  //跳转到stulist.jsp
        User user = userService.getUserById(sid);
        mv.addObject("user",user);
        return mv;
    }

    /*
    * 根据id删除用户
    * GET类型的 ../user/sid/10 请求调用该方法。
    * 类似这种 /{param1}/{param2}..的uri请求,那么就可以使用@PathVariables参数对路径参数进行映射封装。
    */
    @RequestMapping(value = "/sid/{sid}",method=RequestMethod.DELETE)  
    public ModelAndView DeleteUserById(@PathVariable String sid){ //sid参数对应方法上的路径参数{sid}
        ModelAndView mv = new ModelAndView("stulist");  //跳转到stulist.jsp
        int ret = userService.DeleteUserById(sid);
        mv.addObject("ret",ret);
        return mv;
    }

    //可以看见上述的getUserById和DeleteUserById对应的请求URI都一样,但是是如何区别调用那个方法呢?那就是根据HTTP的method类型。
    //修改方法省略,大致相同,就是method=R
  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值