Spring MVC中@RequestMapping 6个基本用法小结

 

小结下spring mvc中的@RequestMapping的用法。 


1)最基本的,方法级别上应用,例如: 
   

Java代码  收藏代码

  1. @RequestMapping(value="/departments")  
  2. public String simplePattern(){  
  3.   
  4.   System.out.println("simplePattern method was called");  
  5.   return "someResult";  
  6.   
  7. }  


   则访问http://localhost/xxxx/departments的时候,会调用 simplePattern方法了 

2) 参数绑定 
  

Java代码  收藏代码

  1. @RequestMapping(value="/departments")  
  2. public String findDepatment(  
  3.   @RequestParam("departmentId") String departmentId){  
  4.     
  5.     System.out.println("Find department with ID: " + departmentId);  
  6.     return "someResult";  
  7.   
  8. }  


   
  形如这样的访问形式: 

   /departments?departmentId=23就可以触发访问findDepatment方法了 

3 REST风格的参数 
  

Java代码  收藏代码

  1. @RequestMapping(value="/departments/{departmentId}")  
  2. public String findDepatment(@PathVariable String departmentId){  
  3.   
  4.   System.out.println("Find department with ID: " + departmentId);  
  5.   return "someResult";  
  6.   
  7. }  


  
  形如REST风格的地址访问,比如: 
/departments/23,其中用(@PathVariable接收rest风格的参数 

4 REST风格的参数绑定形式之2 
   先看例子,这个有点象之前的: 

 

Java代码  收藏代码

  1. @RequestMapping(value="/departments/{departmentId}")  
  2. public String findDepatmentAlternative(  
  3.   @PathVariable("departmentId") String someDepartmentId){  
  4.   
  5.     System.out.println("Find department with ID: " + someDepartmentId);  
  6.     return "someResult";  
  7.   
  8. }  



   这个有点不同,就是接收形如/departments/23的URL访问,把23作为传入的departmetnId,,但是在实际的方法findDepatmentAlternative中,使用 
@PathVariable("departmentId") String someDepartmentId,将其绑定为 
someDepartmentId,所以这里someDepartmentId为23 

5 url中同时绑定多个id 

Java代码  收藏代码

  1. @RequestMapping(value="/departments/{departmentId}/employees/{employeeId}")  
  2. public String findEmployee(  
  3.   @PathVariable String departmentId,  
  4.   @PathVariable String employeeId){  
  5.   
  6.     System.out.println("Find employee with ID: " + employeeId +   
  7.       " from department: " + departmentId);  
  8.     return "someResult";  
  9.   
  10. }  

 


   这个其实也比较好理解了。 

6 支持正则表达式 
  

 

Java代码  收藏代码

  1. @RequestMapping(value="/{textualPart:[a-z-]+}.{numericPart:[\\d]+}")  
  2. public String regularExpression(  
  3.   @PathVariable String textualPart,  
  4.   @PathVariable String numericPart){  
  5.   
  6.     System.out.println("Textual part: " + textualPart +   
  7.       ", numeric part: " + numericPart);  
  8.     return "someResult";  
  9. }  

 


   比如如下的URL:/sometext.123,则输出: 

 

 

Textual part: sometext, numeric part: 123. 

 

 

转载自:http://jackyrong.iteye.com/blog/1806326 

 

另外一篇介绍Spring mvc中@RequestMapping,可参考:http://blog.csdn.net/aini201/article/details/18734245 

 

 

 

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

一个实际应用:

原文出处:http://www.cnblogs.com/leiOOlei/p/3658147.html

 

 

 

Spring3 MVC请求参数获取的几种方法

一、      通过@PathVariabl获取路径中的参数

复制代码

    @RequestMapping(value="user/{id}/{name}",method=RequestMethod.GET)
    public String printMessage1(@PathVariable String id,@PathVariable String name, ModelMap model) {
        
        System.out.println(id);
        System.out.println(name);
        model.addAttribute("message", "111111");
        return "users";
    }

复制代码

 

例如,访问user/123/lei路径时,执行以上方法,其中,参数id=123,name=lei

 

二、      @ModelAttribute获取POST请求的FORM表单数据

JSP表单如下

<form method="post" action="hao.do">
    a: <input id="a" type="text"   name="a"/>
    b: <input id="b" type="text"   name="b"/>
    <input type="submit" value="Submit" />
 </form>

 

Java  Pojo如下

    public class Pojo{
        private String a;
        private int b;
    }

 

Java Controller如下

@RequestMapping(method = RequestMethod.POST) 
public String processSubmit(@ModelAttribute("pojo") Pojo pojo) { 
    
    return "helloWorld"; 
}

三、      直接用HttpServletRequest获取

@RequestMapping(method = RequestMethod.GET) 
public String get(HttpServletRequest request, HttpServletResponse response) { 
   System.out.println(request.getParameter("a")); 
    return "helloWorld"; 
}

 

四、      用注解@RequestParam绑定请求参数

用注解@RequestParam绑定请求参数a到变量a

当请求参数a不存在时会有异常发生,可以通过设置属性required=false解决,

例如: @RequestParam(value="a", required=false)

Controller如下

@RequestMapping(value = "/requestParam", method = RequestMethod.GET) 
public String setupForm(@RequestParam("a") String a, ModelMap model) { 
   System.out.println(a); 
return "helloWorld";
}

 

 

 

 

 

spring mvc controller间跳转 重定向 传参 :

http://zghbwjl.blog.163.com/blog/static/12033667220137795252845/

 

spring mvc controller间跳转 重定向 传参  

 

1. 需求背景

    需求:spring MVC框架controller间跳转,需重定向。有几种情况:不带参数跳转,带参数拼接url形式跳转,带参数不拼接参数跳转,页面也能显示。

本来以为挺简单的一件事情,并且个人认为比较常用的一种方式,一百度全都有了,这些根本不是问题,但是一百度居然出乎我的意料,一堆都不是我想要的结果。无奈啊,自己写一篇比较全都供以后大家一百度吧,哈哈哈。。。是这些写的不是很全都人们给了我写这篇博客的动力。

2. 解决办法

    需求有了肯定是解决办法了,一一解决,说明下spring的跳转方式很多很多,我这里只是说一些自我认为好用的,常用的,spring分装的一些类和方法。

    (1)我在后台一个controller跳转到另一个controller,为什么有这种需求呢,是这样的。我有一个列表页面,然后我会进行新增操作,新增在后台完成之后我要跳转到列表页面,不需要传递参数,列表页面默认查询所有的。

        方式一:使用ModelAndView

        return new ModelAndView("redirect:/toList");

        这样可以重定向到toList这个方法

        方式二:返回String

                    return "redirect:/ toList "; 

        其它方式:其它方式还有很多,这里不再做介绍了,比如说response等等。这是不带参数的重定向。

    (2)第二种情况,列表页面有查询条件,跳转后我的查询条件不能丢掉,这样就需要带参数的了,带参数可以拼接url

        方式一:自己手动拼接url

                    new ModelAndView("redirect:/toList?param1="+value1+"&param2="+value2);

                    这样有个弊端,就是传中文可能会有乱码问题。

        方式二:用RedirectAttributes,这个是发现的一个比较好用的一个类

                    这里用它的addAttribute方法,这个实际上重定向过去以后你看url,是它自动给你拼了你的url。

                    使用方法:

                     attr.addAttribute("param", value);

                    return "redirect:/namespace/toController";

                    这样在toController这个方法中就可以通过获得参数的方式获得这个参数,再传递到页面。过去的url还是和方式一一样的。

    (3)带参数不拼接url页面也能拿到值(重点是这个)

            一般我估计重定向到都想用这种方式:

            @RequestMapping("/save")

    public String save(@ModelAttribute("form") Bean form,RedirectAttributes attr)

                   throws Exception {

 

        String code =  service.save(form);

        if(code.equals("000")){

            attr.addFlashAttribute("name", form.getName());  

            attr.addFlashAttribute("success", "添加成功!");

            return "redirect:/index";

        }else{

            attr.addAttribute("projectName", form.getProjectName());  

            attr.addAttribute("enviroment", form.getEnviroment());  

            attr.addFlashAttribute("msg", "添加出错!错误码为:"+rsp.getCode().getCode()+",错误为:"+rsp.getCode().getName());

            return "redirect:/maintenance/toAddConfigCenter";

        }

    }

 

@RequestMapping("/index")

      

    public String save(@ModelAttribute("form") Bean form,RedirectAttributes attr)

                   throws Exception {

            return "redirect:/main/list";

    }

页面取值不用我说了吧,直接用el表达式就能获得到,这里的原理是放到session中,session在跳到页面后马上移除对象。所以你刷新一下后这个值就会丢掉。

3. 总结

    最底层还是两种跳转,只是spring又进行了封装而已,所以说跳转的方式其实有很多很多种,你自己也可以封一个,也可以用最原始的response来,也没有问题。好了,就到这儿。

    其实也没有什么,但是知道了这个就很简单了,之前没搞懂,现在搞懂了,和大家分享。有问题的给我留言。

 

 

相关视频课程推荐《站长必修课:网站是怎样做出来的?》https://edu.51cto.com/sd/3be5b

网站是怎样做出来的?

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值