欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 美景 > SpringMVC——数据传递的多种方式

SpringMVC——数据传递的多种方式

2025/3/26 9:43:07 来源:https://blog.csdn.net/weixin_45075226/article/details/146495152  浏览:    关键词:SpringMVC——数据传递的多种方式

        本文详细介绍SpringMVC的多种传值方法,像URL路径、参数、表单、Session这些常见方式,以及字符串、JSON、Cookie 和 Header 传递等方法。

本文目录

    • 1. 通过URL路径传值
    • 2. 通过URL参数传值
    • 3. 通过表单传值
    • 4. 通过Session传值
    • 5. 通过 Cookie 传递
    • 6. JSON 传递

1. 通过URL路径传值

这种方式是将参数直接放在 URL 的路径中,SpringMVC 可以通过 @PathVariable 注解来获取这些参数。

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
public class PathVariableController {@RequestMapping("/user/{id}")@ResponseBodypublic String getUserById(@PathVariable("id") int id) {return "UserID: " + id;}
}

@PathVariable 注解用于绑定 URL 路径中的变量 id,并将其作为方法的参数传入。当访问 /user/1 时,id 的值就是 1。



2. 通过URL参数传值

这是最常见的传值方式,将参数以 key = value 的形式附加在URL后面,多个参数之间用 & 分隔。SpringMVC 可以通过 @RequestParam 注解来获取这些参数。

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
public class RequestParamController {@RequestMapping("/search")@ResponseBodypublic String search(@RequestParam("keyword") String keyword) {return "keyword: " + keyword;}
}

@RequestParam 注解用于绑定UR 参数 keyword,并将其作为方法的参数传入。当访问 /search?keyword=java 时,keyword 的值就是 java



3. 通过表单传值

在 HTML 表单中填写数据,提交表单时,表单数据会被发送到服务器。SpringMVC可以通过 @ModelAttribute 注解将表单数据绑定到一个Java对象上。

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;class User {private String name;private int age;// Getters and Setterspublic String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}@Controller
public class ModelAttributeController {@RequestMapping("/register")@ResponseBodypublic String register(@ModelAttribute User user) {return "name: " + user.getName() + ", age: " + user.getAge();}
}

@ModelAttribute 注解将表单数据绑定到 User 对象上。表单中的 nameage 字段会自动映射到 User 对象的相应属性上。



4. 通过Session传值

通过 HttpSession 对象来实现数据在不同请求之间的传递。

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;@Controller
public class SessionController {@RequestMapping("/setSession")@ResponseBodypublic String setSession(HttpServletRequest request) {HttpSession session = request.getSession();session.setAttribute("message", "Hello, Session!");return "Session attribute set.";}@RequestMapping("/getSession")@ResponseBodypublic String getSession(HttpServletRequest request) {HttpSession session = request.getSession();String message = (String) session.getAttribute("message");return "value: " + message;}
}

setSession 方法将一个字符串存储到 HttpSession 中,getSession 方法从 HttpSession 中获取该字符串。



5. 通过 Cookie 传递

可以在请求和响应中使用 Cookie 来传递数据。在 SpringMVC 中,可以使用 @CookieValue 注解获取请求中的 Cookie 值,也可以通过 HttpServletResponse 设置响应的 Cookie。

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;@Controller
public class CookieController {@RequestMapping("/setCookie")@ResponseBodypublic String setCookie(HttpServletResponse response) {Cookie cookie = new Cookie("userName", "John");cookie.setPath("/");response.addCookie(cookie);return "Cookie set.";}@RequestMapping("/getCookie")@ResponseBodypublic String getCookie(@CookieValue(value = "userName", defaultValue = "Unknown") String userName) {return "value: " + userName;}
}



6. JSON 传递

使用@RequestBody 注解,能接收JSON数据并将其转换为Java对象。

import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;class UserInfo {private String username;private int userAge;// Getters and Setterspublic String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public int getUserAge() {return userAge;}public void setUserAge(int userAge) {this.userAge = userAge;}
}@Controller
public class JsonPassingController {@RequestMapping(value = "/jsonPass", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)@ResponseBodypublic String handleJson(@RequestBody UserInfo user) {return "user: " + user.getUsername() + ", age: " + user.getUserAge();}
}

使用 @RequestBody 注解把接收到的 JSON 数据映射到 UserInfo 对象,发送的 JSON 数据格式如 {"username": "John", "userAge": 25},就能把数据封装到 UserInfo 对象中。



← 上一篇 Java进阶——常用类及常用方法详解
记得点赞、关注、收藏哦!
下一篇 Java进阶——数组超详细整理 →

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词