zoukankan      html  css  js  c++  java
  • SpringMVC RESTful

    RESTful是web应用的一种设计风格、开发方式。

    以根据product_id查询产品信息为例。

    原来的写法

    @org.springframework.stereotype.Controller
    public class ProductController{
    
        @RequestMapping("/queryProduct")
        public ModelAndView queryStudent(int product_id) {
            ModelAndView mav = new ModelAndView("product_info");
            //此处省略调用dao层获取产品信息,得到Product类的实例product
            //将数据传给视图,展示产品信息
            mav.addObject("product", product);
            return mav;
        }
    
    }

    请求地址:

    http://.../queryProduct?product_id=1

    RESTful风格的写法

    @org.springframework.stereotype.Controller
    public class ProductController{
    
        @RequestMapping("/product/{product_id}")
        public ModelAndView queryStudent(@PathVariable int product_id) {
            ModelAndView mav = new ModelAndView("product_info");
            //此处省略调用dao层获取产品信息,得到Product类的实例product
            //将数据传给视图,展示产品信息
            mav.addObject("product", product);
            return mav;
        }
    
    }

    请求地址:

    http://.../product/1

    原来是映射为queryProduct、saveUser,动词+名词;

    RESTful风格是映射为product、user,名词。

    原来使用 ?参数名=参数值  来传参数,

    RESTful是直接把参数值写成下一级路径的形式 , /1。

        @RequestMapping("/product/{product_id}")
        public ModelAndView queryStudent(@PathVariable int product_id) {
           
        }

    在@RequestMapping中,用{ }来接收对应位置上的值,{ }中随便写一个变量名,用这个变量来接收值。注意是{ },不是#{ },也不是${ }。

    映射地址时会自动把{ }部分换为相应的值。

    并且,SpringMVC会把{ }的值赋给业务方法中@PathVariable修饰的参数

    怎么赋值?

        @RequestMapping("/product/{product_type}/{product_id}")
        public ModelAndView queryProduct(@PathVariable String type,@PathVariable("product_id") int product_id) {
            
        }

    如果业务方法的参数名和{ }中的变量名相同,直接用@PathVariable修饰参数即可,SpringMVC会自动把值赋给同名的参数。

    如果不相同,需要用@PathVariable("  ")指定这个参数要使用哪个{ }的值。参数通过@PathVariable(" ")与某个{ }绑定。

    这种写法还是比较常见的,比如把产品类型、产品id传过去:

    http://.../product/phone/5
    http://.../product/computer/9

    手机这个大类的第五款产品,电脑这个大类的第9款产品。

    再比如把搜索的关键字传过去:

    http://.../search/chy

    比如说查看某用户、的某类型、的第几篇文章,把用户id、类型、文章id传过去,请求参数甚至可以用来拼接视图名:

    https://www.cnblogs.com/chy18883701161/p/12249175.html

    映射的url地址随着请求参数的变化而变化,带{ }的这个@RequestMapping映射地址只是一个模板,所以又叫做url模板映射。

    表单的action、<a>链接的href、转发和重定向、业务方法中返回的视图名,都可以使用url模板映射。


    http://.../user/1

    addUser、deleteUser、updateUser、queryUser,业务方法众多,总不能都映射为/user吧。

        @RequestMapping(value = "/user/{user_id}",method = RequestMethod.GET)
        public ModelAndView queryProduct(@PathVariable int user_id) {
    
        }

    不是可以指定HTTP请求方式吗,4个方法都映射为/user,以HTTP请求方式来区分CRUD:

    • get   查询
    • put   添加
    • delete   删除
    • post   更新

    使用ajax发请求时,根据操作类型使用对应的HTTP请求方式。

    这种方式不常用,因为国内基本只用get、post。

    可以使用@RequestMapping(),在里面指定HTTP请求方式,也可以直接使用对应的注解:

        @RequestMapping(value = "/user/{user_id}",method = RequestMethod.GET)
        
        @GetMapping("/user/{user_id}")

    完全等价。

    4种HTTP请求都有对应的注解。

  • 相关阅读:
    使用spring AOP获得session的思路
    Oracle相关操作示例(导出导入dmp需要采用)
    sql server 2008 不允许保存更改,您所做的更改要求删除并重新创建以下表 的解决办法
    Java之旅hibernate(8)——基本关系映射
    进一步优化SPA的首屏打开速度(模块化与懒载入) by 嗡
    Codeforces461A Appleman and Toastman 贪心
    程序猿,一个吃青春饭的行业
    The 14th UESTC Programming Contest Final B
    我开发的“小灵”,自觉得比微软“小冰”好多了
    windows下安装配置apacheserver
  • 原文地址:https://www.cnblogs.com/chy18883701161/p/12250771.html
Copyright © 2011-2022 走看看