Spring MVC 学习 之 - URL参数传递详解

作者:Rhythmk 时间:2022-03-04 22:05:12 

在学习 Spring Mvc 过程中,有必要来先了解几个关键参数:

@Controller:

在类上注解,则此类将编程一个控制器,在项目启动 Spring 将自动扫描此类,并进行对应URL路由映射。


@Controller

public class UserAction{ }

@RequestMapping

指定URL映射路径,如果在控制器上配置 RequestMapping  ,具体请求方法也配置路径则映射的路径为两者路径的叠加 常用映射如:RequestMapping("url.html")

配置映射路径:


@Controller
public class UserAction
{
 @RequestMapping(value = "/get_alluser.html")
 public ModelAndView GetAllUser(String Id)
 {
 }
}

以上配置映射

http://***:8080:web1/get_alluser.html:

如在 @Controller添加 @RequestMapping(value = "/user"),则映射路径变成

http://***:8080:web1/user/get_alluser.html

@ResponseBody

将注解方法对应的字符串直接返回

 @RequestParam

自动映射URL对应的参数到Action上面的数值,RequestParam 默认为必填参数。

 @PathVariable

获取@RequestMapping 配置指定格式的URL映射参数


/*
  *  直接输出 HTML,或JSON 字符串
  *  请求路径:
  *    /web1/urlinfo/getcontent.html?key=rhythmk
  *   /web1/urlinfo/getcontent.json?key=rhythmk
  * */
 @ResponseBody
 @RequestMapping(value = "/getcontent.**")
 public String GetContent(
     @RequestParam("key") String key,
     @RequestParam(value = "key2", required = false, defaultValue = "defaultValue") String key2) {
   System.out.println("getcontent 被调用");
   String result = "直接返回内容 - key:" + key + ",key2:" + key2;
   System.out.println(result);
   return result;
 }


/*
  * RequestMapping 支持 Ant 风格的URL配置 :
  * 请求路径:
  *   /urlinfo/geturlant/config.html?key=adddd
  */
 @ResponseBody
 @RequestMapping(value = "/geturlant/**.html")
 public String getUrlAnt(HttpServletRequest request) {
   String result = "?后面的参数为:" + request.getQueryString();
   return result;
 }

/*
  * 配置指定格式的URL,映射到对应的参数
  *  请求路径:/web1/urlinfo/geturlparam/12_123.html
  *  
  * */

@RequestMapping(value = "/geturlparam/{id}_{menuId}.html")
 public ModelAndView getUrlParam(@PathVariable("id") String id,
     @PathVariable("menuId") String menuId) {
   ModelAndView mode = new ModelAndView(ShowMsg);
   mode.addObject("msg", "获取到的Id:" + id + ",menuId:" + menuId);
   return mode;
 }

 /*
  * 只接收Post 请求
  */
 @ResponseBody
 @RequestMapping(value = "/posturl.html", method = RequestMethod.POST)
 public String UrlMethod(@RequestParam String id) {
   return "只能是Post请求,获取到的Id:" + id;
 }

 /*
  *  写入 cookie
  * */
 @RequestMapping("/writecookies.html")
 public ModelAndView writeCookies(@RequestParam String value,
     HttpServletResponse response) {

response.addCookie(new Cookie("key", value));
   ModelAndView mode = new ModelAndView(ShowMsg);
   mode.addObject("msg", "cookies 写入成功");
   return mode ;
 }


 /*
   * 通过 @CookieValue 获取对应的key的值
   * */
 @RequestMapping("/getcookies.html")
 public ModelAndView getCookie(@CookieValue("key") String cookvalue) {
   ModelAndView mode = new ModelAndView(ShowMsg);
   mode.addObject("msg", "cookies=" + cookvalue);
   return mode;
 }

 /*
  * 将 Servlet Api 作为参数传入
  *  可以在action中直接使用 HttpServletResponse,HttpServletRequest
  * */
 @RequestMapping("/servlet.html")
 public String Servlet1(HttpServletResponse response,
     HttpServletRequest request) {

Boolean result = (request != null && response != null);
   ModelAndView mode = new ModelAndView();
   mode.addObject("msg", "result=" + result.toString());
   return ShowMsg;

}

 /*
  *  根据URL传入的参数实例化对象
  *  
  *  如: http://127.0.0.1:8080/web1/urlinfo/getobject.html?UserId=1&UserName=ad
  * */
 @RequestMapping("getobject.html")
 public ModelAndView getObject(UserInfo user) {
   String result = "用户ID:" + user.getUserId().toString() + ",用户名:"
       + user.getUserName().toString();
   ModelAndView mode = new ModelAndView(ShowMsg);
   mode.addObject("msg", "result=" + result.toString());
   return mode;
 }

 实现页面跳转:


 /*
  * 实现页面跳转
  * /web1/urlinfo/redirectpage.html
  * */
 @RequestMapping("/redirectpage.html")
 public String RedirectPage()
 {
   return "redirect:getcookies.html?r=10";

}

直接回传JSON

请求的URL地址一定是以.json结尾,否则异常

Failed to load resource: the server responded with a status of 406 (Not Acceptable) : The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request "accept" headers () 

回传实体:
 


@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
public class UserInfo {

private Integer UserId;
  public Integer getUserId() {
   return UserId;
 }
 public void setUserId(Integer userId) {
   UserId = userId;
 }
 public String getUserName() {
   return UserName;
 }
 public void setUserName(String userName) {
   UserName = userName;
 }
 private String UserName;

}

回传 action 


@ResponseBody
 @RequestMapping("/getuser.json")
 public UserInfo GetUser()
 {
   System.out.println("getuser");
   UserInfo model=new UserInfo();
   model.setUserId(100);
   model.setUserName("王坤");
   return model;
 }

请求:

/web1/urlinfo/getuser.json

输出:


{"userId":100,"userName":"王坤"}
标签:springmvc,参数,传递
0
投稿

猜你喜欢

  • Android保持屏幕常亮2种实现方法

    2022-09-08 11:22:43
  • Android从网络中获得一张图片并显示在屏幕上的实例详解

    2023-11-03 01:17:43
  • C#实现自定义单选和复选按钮样式

    2022-07-22 04:01:41
  • C++ Opencv实现录制九宫格视频

    2023-08-16 04:11:28
  • 教你开发脚手架集成Spring Boot Actuator监控的详细过程

    2021-11-19 03:27:39
  • JVM之参数分配(全面讲解)

    2023-11-09 08:19:10
  • Java 二分查找算法的实现

    2022-07-23 11:10:13
  • 详解c# 线程同步

    2023-11-23 08:54:48
  • 详解如何利用C#实现设置系统时间

    2023-09-04 13:55:05
  • Mono for Android 实现高效的导航(Effective Navigation)

    2023-09-05 21:39:56
  • Java根据ip地址获取归属地实例详解

    2023-11-25 06:24:38
  • Fragment 多层嵌套方法调用问题的解决方案

    2023-09-29 08:12:38
  • eclipse报错 eclipse启动报错解决方法

    2023-04-28 08:43:49
  • Java使用application.property读取文件里面的值

    2023-11-01 07:24:56
  • Android自定义Notification添加点击事件

    2022-04-06 19:06:30
  • C#中使用ADOMD.NET查询多维数据集的实现方法

    2023-10-27 05:38:15
  • java分割文本字符串的方法

    2023-11-13 03:52:24
  • Java设计模式之原型设计示例详解

    2023-08-04 04:53:35
  • java获取文件的inode标识符的方法

    2021-06-19 15:10:49
  • SpringBoot上传图片到指定位置并返回URL的实现

    2023-08-13 14:02:52
  • asp之家 软件编程 m.aspxhome.com