zoukankan      html  css  js  c++  java
  • SpringMVC常用注解,返回方式,路径匹配形式,验证

    常用注解元素

    @Controller

    标注在Bean的类定义处

    @RequestMapping

    真正让Bean具备 Spring MVC Controller 功能的是 @RequestMapping 这个注解

    @RequestMapping 可以标注在类定义处,将 Controller 和特定请求关联起来;

    还可以标注在方法签名处,以便进一步对请求进行分流

    配套的属性有:

    value 需要跳转的地址

    method 基于RestFul的跳转参数,有RequestMethod.get post put delete等

    params 符合某个参数的时候才调用该方法

    Headers 符合头信息的时候才调用

    @SessionAttributes

    将结果放入session内

    @ModelAttribute

    存储在响应内容ModelMap或者ModelAndView进行保存值传到前台,当如果你需要保存值比较少

    的时候可以采用这种方式进行保存值并且保存到前台显示

    在默认情况下,ModelMap 中的属性作用域是 request 级别,相当于HttpServletRequest中的request.setAttribute() 一样,在 JSP 视图页面中通过 request.getAttribute(“attribute name”) 或者通过

    ${ attribute name } EL 表达式访问模型对象中的 属性对象

    如果希望在ModelMap 的作用域范围为 session,可以有选择地指定 ModelMap 中的哪些属性需要转存到 session 中,以便下一个请求属对应的 ModelMap 的属性列表中还能访问到这些属性。这一功能是通过类定义处标注 @SessionAttributes 注解来实现 如:

    @Controller

    @RequestMapping("/login.do")

    @SessionAttributes("currUser")

    public class BbtForumController {。。。。。}

    @ResponseBody

    标注后 返回String对象的结果为response内容体,不标注的话 作为dispatcher url使用

    @PathVariable

    允许将请求路径的制定内容当做求情的参数使用

    返回类型

    请求处理方法入参的可选类型 说明

    void 此时逻辑视图名由请求处理方法对应的 URL 确定,如以下的方法:

    @RequestMapping("/welcome.do")

    public void welcomeHandler() {

    }

    对应的逻辑视图名为“welcome”

    String 此时逻辑视图名为返回的字符,如以下的方法:

    @RequestMapping(method = RequestMethod.GET)

    public String setupForm(@RequestParam("ownerId") int ownerId, ModelMap model) {

    Owner owner = this.clinic.loadOwner(ownerId);

    model.addAttribute(owner);

    return "ownerForm";

    }

    对应的逻辑视图名为“ownerForm”

    ModelMap 和返回类型为 void 一样,逻辑视图名取决于对应请求的 URL,

    如下面的例子:

    @RequestMapping("/vets.do")

    public ModelMap vetsHandler() {

    return new ModelMap(this.clinic.getVets());

    }

    对应的逻辑视图名为“vets”,返回的 ModelMap 将被作为请求对应的模型对象,

    可以在 JSP 视图页面中访问到。

    ModelAndView

    返回方式

    1 使用无返回方法跳转,如果使用返回方法进行跳转的话,则会通过视图解析器进行以

    prefix(前缀)+方法名+suffix(后缀)组成的页面文件名称.

    2 使用一个返回的字符串方法作为跳转,使用字符串跳转的话好处就是在return的时候可

    以自己指定返回的名字,JSP组成是prefix(前缀)+返回的字符串+suffix(后缀)

    3 返回一个ModelAndView类型,使用setViewName方法则可以跳转到指定的页面.

    路径匹配形式

    1、单一Controller 对应 单一的请求路径

    2、单一Controller 对应多个请求路径

    3、单一Controller 对应多个请求路径,且路径内可以含有参数的形式

    Demo code and UseCase

    @Controller

    @RequestMapping("/login.do")

    public class SinglePathWithController {}

    @Controller

    @SessionAttributes(types = {UserBean.class,String.class},value={"currentUser","message"})

    public class AdapterMultiPathController {}

    @Controller

    @RequestMapping(value = "/rest")

    public class RestWithController {}

    无返回

    //无返回值 无参数返回的是根据 prefix前缀+@RequestMapping value +suffix

    后缀组成

    @RequestMapping("/springmvc/common")

    public voidnovoid(HttpServletRequest request) {

    request.setAttribute("message", "novoid方法被调用");

    }

    返回字符串

    1、 作为视图路径方式

    //根据路径直接匹配

    @RequestMapping("/springmvc/multiReqPath1.do")

    public String multiReqPath1(HttpServletRequest request){

    request.setAttribute("message", "multiReqPath1方法被调用");

    return "springmvc/common";

    }

    @RequestMapping("/springmvc/multiReqPath2.do")

    public String multiReqPath2(HttpServletRequest request){

    request.setAttribute("message", "multiReqPath2方法被调用");

    return "/springmvc/common";

    }

    //根据参数匹配

    @RequestMapping(params = "m=method1",method = RequestMethod.GET)

    public String method1(){

    return "login/success";

    }

    //有参数 参数名和请求url内的变量名一致

    @RequestMapping(params = "m=method2")

    public String method2(String name,String pwd){

    return name;

    }

    //有参数 参数名和请求url内的变量名不一致

    @RequestMapping(params = "m=method3",method = RequestMethod.GET)

    public String method3(@RequestParam("loginName")Stringname,@RequestParam("loginPwd")String pwd,HttpServletRequest request){

    request.setAttribute("message",(name + " " + pwd));

    return "login/"+name;

    }

    2、 作为Response内容方式

    //无参数

    @ResponseBody

    @RequestMapping(params = "m=method4")

    public String method4(){

    return "hello,guys";

    }

    //处理方法入参如何绑定 URL 参数

    @ResponseBody

    @RequestMapping(params = "m=method5",method = RequestMethod.GET)

    public String method5(String name,String pwd,int delay){

    return "name:"+name+","+"pwd:"+pwd+","+"delay:"+delay;

    }

    @ResponseBody

    @RequestMapping(params = "m=method6",method = RequestMethod.GET)

    public String method6(@RequestParam("userName")String name,DnTest test){

    return "DnTest:"+test.toString();

    }

    URL 参数: userName参数将绑定到name 其他与DnTest类内属性名称一致的参数将绑定到test的对应的属性上,如果参数不全 也不会报错

    返回ModelAndView

    @RequestMapping("/springmvc/modelAndView")

    public ModelAndView modelAndView(){

    ModelAndView mav = new ModelAndView();

    mav.setViewName("/springmvc/common");

    mav.addObject("message", "modelAndView 方法被调用");

    return mav;

    }

    返回ModelMap

    @RequestMapping("/springmvc/modelMap")

    public ModelMap modelMap(ModelMap modMap){

    List<String> names = new ArrayList<String>();

    names.add("Rick");

    names.add("Austin");

    modMap.put("names", names);

    modMap.put("message", "hello guys");

    modMap.put("comment", "hello guys");

    return modMap;

    }

    返回ModelMap

    @RequestMapping("/springmvc/modelMap")

    public ModelMap modelAndView(ModelMap modMap){

    List<String> names = new ArrayList<String>();

    names.add("Rick");

    names.add("Austin");

    modMap.put("hello", "hello guys");

    modMap.put("names", names);

    return modMap;

    }

    @SessionAttribute & ModMap

    //注解方式

    @Controller

    @SessionAttributes(types = {UserBean.class,String.class},value={"currentUser","message"})

    public class AdapterMultiPathController {}

    //方法体

    @RequestMapping("/springmvc/modelMap2")

    public ModelMap modelMapWithSession(ModelMap modMap,HttpServletRequest request){

    List<String> names = new ArrayList<String>();

    names.add("Rick");

    names.add("Austin");

    modMap.put("names",names);

    modMap.put("message", "hello guys");

    modMap.put("comment", "hello guys");

    UserBean user = new UserBean();

    user.setName("Rick");

    user.setMobile("18938900256");

    user.setTelephone(request.getParameter("userPhone"));

    user.setNumber(request.getParameter("userNumber"));

    modMap.put("currentUser", user);

    return modMap;

    }

    //初次请求

    spring mvc & reverse ajax

    @ResponseBody

    @RequestMapping(params = "m=method7",method = RequestMethod.GET)

    public String method7(String name,String pwd,int delay,HttpServletRequest req){

    req.startAsync();

    Date startTime = new Date();

    try {

    Thread.currentThread().sleep(delay);

    } catch (InterruptedException e) {

    e.printStackTrace();

    }

    Date entTime = new Date();

    return "name:"+name+","+"pwd:"+pwd+","+"delay:"+delay+",startTime:"+

    DateUtils.formatDate(startTime, "yyyy-MM-dd HH:mm:ss:SSS")+",endTime:"+

    DateUtils.formatDate(entTime, "yyyy-MM-dd HH:mm:ss:SSS");

    }

    RestFull

    @Controller

    @RequestMapping(value = "/rest")

    public class RestWithController {}

    @ResponseBody

    @RequestMapping(value = "/{msg}", method = RequestMethod.GET)

    public String restString(@PathVariable String msg) {

    return msg;

    }

    @ResponseBody

    @RequestMapping(value = "/{path}/{value}", method = RequestMethod.GET)

    public String restXml(@PathVariable String path,@PathVariable String value) {

    return "path:"+path+",value:"+value;

    }

    @ResponseBody

    @RequestMapping(value = "/xml/{filename}", method = RequestMethod.GET)

    public String restFile(@PathVariable String filename) {

    if (filename!=null) {

    ProjectInits init = ProjectInits.getInstance();

    String dir = init.get("resource.dir", "C:/Projects/VoyagerWeb/resources");

    FileUtility fUtil = new FileUtility();

    String content = fUtil.readFile(dir+"/"+filename+".xml");

    return content;

    }

    else

    return "Invalid xml file name ["+filename+"]";

    }

    验证 是否支持Overload

    方式一

    //验证 是否支持Overload

    @ResponseBody

    @RequestMapping(value = "/validate/overload1", method = RequestMethod.GET)

    public String overloadMethod(String name){

    return name;

    }

    @ResponseBody

    @RequestMapping(value = "/validate/overload2", method = RequestMethod.GET)

    public String overloadMethod(String name,DnTest test){

    return "DnTest:"+test.toString();

    }

    方式二

    /验证 是否支持Overload

    @ResponseBody

    @RequestMapping(params = "m=method11")

    public String method11(String name){

    return name;

    }

    @ResponseBody

    @RequestMapping(params = "m=method11")

    public String method11(int age,DnTest test){

    return "DnTest:"+test.toString();

    }

     

    原文地址:http://blog.sina.com.cn/s/blog_a43be7b001011lx9.html

  • 相关阅读:
    MSIL实用指南-一维数组的操作
    MSIL实用指南-给字段、属性、方法、类、程序集加Attribute
    MSIL实用指南-比较运算
    MSIL实用指南-逻辑运算
    MSIL实用指南-位运算
    MSIL实用指南-数学运算
    MSIL实用指南-创建对象
    MSIL实用指南-装箱拆箱
    MSIL实用指南-生成构造函数
    K8S从入门到放弃系列-(5)kubernetes集群之kube-apiserver部署
  • 原文地址:https://www.cnblogs.com/suizhikuo/p/3589984.html
Copyright © 2011-2022 走看看