Java Web核心数据交互技术全解析
在Java Web开发中,客户端与服务器之间的数据交互是核心环节,涉及数据格式转换、请求参数传递、文件上传以及用户状态保持等关键技术。本文将系统梳理JSON与Java对象的转换、URL参数获取、文件上传、Cookie与Session机制等核心内容,结合实际代码示例与场景类比,帮助开发者全面掌握Java Web数据交互的实现方法。
Json是客户端和服务器进行交互的一种数据格式。
它使用一个字符串来表示对象或者数组等元素。
数组用[]表示,对象使用{}表示,属性和值之间使用:来进行分割,键值对之间使用,来分割。
下面我们来讲一下Java的对象和Json之间如何进行转换:
Json转Java对象
@Testvoid testObject2Json() throws JsonProcessingException {ObjectMapper objectMapper = new ObjectMapper();//创建Java对象UserInfo userInfo = new UserInfo();userInfo.setName("张三");userInfo.setGender(1);userInfo.setAge(18);//对象转jsonString s=objectMapper.writeValueAsString(userInfo);System.out.println(s);}Java对象转Json
@Testvoid testJson2Object() throws JsonProcessingException {ObjectMapper objectMapper = new ObjectMapper();//定义一个json字符串String s = "{\"age\":18,\"gender\":1,\"name\":\"张三\"}\n";//json转对象
// UserInfo userInfo = objectMapper.readValue(s, UserInfo.class);UserInfo userInfo=objectMapper.readValue(s,UserInfo.class);System.out.println(userInfo);}
在请求中传递Json对象
@RequestMapping("r11")
// @RequestBody表示传递的是一个json对象public String r11(@RequestBody UserInfo userInfo){userInfo.getName();return userInfo.toString();}我们再Postman中应该这样构造请求:

从URL中获取数值
//从url中获取参数@RequestMapping("/article/{articleId}")public String r12(@PathVariable Integer articleId){return "获取文章id: "+articleId;}//也可以同时获取多个参数,并重命名@RequestMapping("/article/{type}/{articleId}") //后面写的{}参数在发送请求的时候必须要传。public String r13(@PathVariable Integer articleId,@PathVariable("type") Integer articleType){return "获取文章ID:"+articleId +",type: "+articleType;}
这里需要注意的当我们写了两个数值的位置,就要在URL中传输两个参数。
以“r13”这个方法为例,我们必须要同时传入type和articliId这两个参数。
同时我们也可以对传入的参数进行重命名:比如在这个方法里我们就把type重命名为articleType.
上传文件
//上传文件@RequestMapping("/r14")//下面这个@RequestPart ("file11")MultipartFile file 表示把请求时输入的file11赋值给new出来的file对象(相当于是重命名)public String r13(@RequestPart ("file11")MultipartFile file) throws IOException {System.out.println(file.getOriginalFilename());file.transferTo(new File("D:\\temp\\" +file.getOriginalFilename()));return "文件上传成功";}在Postman中应该像下面这样发送请求:


最终我们在这个路径之下也找到了刚刚要上传的文件。
Cookie和Session
我们以去医院看病为例,去医院我们首先需要在该家医院建档,所新建的这个档中就包含了我们每个人的基本信息(姓名,身份证号等等)。
建档完成之后,医院会给我们一张诊疗卡(这张卡片上通常会有一个ID)。
之后我们就会拿着这张诊疗卡去挂号,看病,取药。
这个诊疗卡的作用十分关键,医生就是通过这个诊疗卡上的ID去医院的服务器上查询资料,而医院的服务器中就存储了病人的详细信息。
在上述过程中,这个诊疗卡就相当于是Cookie,而病人的详细信息就相当于是session.
所以通过上述这个场景我们便不难发现:
诊疗卡(Cookie)存储在用户自己手里(对应 Cookie是存储在客户端上的),而档案(Session)只存在医院服务器(对应 Session是存储在服务器上的)。
诊疗卡(Cookie)只有ID(轻量标识),并不包含完整的个人信息(大量数据),完整信息都在服务器(Session)里。
无状态协议

上图中的“令牌”通常就存储在Cookie字段当中。
服务器这边就需要存储“令牌”的信息,以及令牌所相对应的用户的信息。这个就是Session索要处理的工作。
所以服务器就需要清楚区分每个请求是属于哪个⽤户, 于是就需要在服务器这边记录每个请求以及与⽤户的信息的对应关系.

SessionID
Session的本质就是⼀个 "哈希表", 存储了⼀些键值对结构.
Key 就是SessionID, Value 就是用户信息。
我们上述例子中诊疗卡中的ID,就可以看做是SessionID。
Session 默认是保存在内存中的. 如果重启服务器则 Session 数据就会丢失.
Cookie 和 Session 的区别
- Cookie 是客户端保存⽤户信息的⼀种机制,Session 是服务器端保存⽤户信息的⼀种机制。
- Cookie 和 Session之间主要是通过 SessionId 关联起来的, SessionId 是 Cookie 和 Session 之间的桥梁。
- Cookie 和 Session 经常会在⼀起配合使⽤,但是不是必须配合。
- Session 中的sessionId 也不需要⾮得通过 Cookie/Set-Cookie 传递, 也可以通过URL传递。

结语
本文介绍了JSON与Java对象的转换、请求参数传递、文件上传,以及Cookie与Session的状态保持机制,结合代码示例与场景类比。在实际开发中,需根据业务场景选择合适的参数传递方式与状态保持方案,同时注意Session的持久化与Cookie的安全性,确保应用的高效与可靠。
