SpringMVC參數接收與數據返回詳解

一,參數的接收

參數接收的幾種方式:

1.使用servlet API接收參數

在方法參數中添加HttpServletRequest類型的參數,然后就可以像servlet的方法一樣來接收參數?

@RequestMapping("p1")public String param1(HttpServletRequest request){String name = request.getParameter("name");String password = request.getParameter("password");return "hello";}

2.在方法中定義同名參數

@RequestMapping("param2")public String method2(int id,String name){System.out.println(id+name);return "param";}

如果url地址中的參數名與方法的參數名不一致時,可以使用RequestParam注解進行重新關聯

@RequestMapping("param3")public String method3(@RequestParam("p") String password){System.out.println(password);return "param";}

url地址中的參數名p,而方法中的參數名是password,這時我們可以使用RequestParam注解對參數進行重新關聯

當我們在方法中接收一個整數類型的參數時,如果url中沒有傳遞該參數則會拋異常。如果這個參數不是必須要傳遞的,我們可以給該參數設置默認值。

@RequestMapping("p2")public String param2(String name,@RequestParam(defaultValue = "0") int age){System.out.println(name);System.out.println(age);return "hello";}

設置完默認值后,如果url中沒有攜帶id參數,則該參數默認值為0,不會拋出異常

3.使用POJO類接收參數

?什么是POJO?
“Plain Old Java Object”“簡單java對象”。POJO的內在含義是指那些沒有從任何類繼承、也沒有實現任何接口,更沒有被其它框架侵入的java對象。

@RequestMapping("student")public String test(Student student){System.out.println(student);return "param";}

spring會自動的從請求中把參數名與Student類中屬性名相同的數據,進行賦值

4.使用PathVariable接收參數

//restful請求傳參方式,可以傳遞多個參數,每個參數都用/分隔,但是不建議傳遞多個//最好只傳一個@RequestMapping("p4/{id}")public String param4(@PathVariable("id") int id){System.out.println(id);return "hello";}

?使用PathVariable進行參數傳遞,首先要在地址中添加占位符,然后使用PathVariable跟方法入參進行綁定

二,返回數據的幾種方式

1.使用servlet API傳遞數據:

?首先需要在方法中增加HttpServletRequest類型的參數,然后使用request對象傳遞數據,使用方式與之前學習servlet時的用法一致

@RequestMapping("resp2")public String method2(HttpServletRequest request){request.setAttribute("msg","test");Student student=new Student();student.setName("張三");request.setAttribute("student",student);return "resp2";}

2.使用Map集合傳遞參數

首先需要在方法中增加java.util.Map類型的參數,然后使用map對象通過put方法,把數據寫入到map中,進行數據傳遞

@RequestMapping("resp3")public String method3(Map<String,Object> map){map.put("msg","map傳參");Student student=new Student();student.setName("張三");map.put("student",student);return "resp2";}

3.使用Model傳遞數據:

首先需要在方法中增加Model類型的參數,然后使用model對象通過addAttribute方法,把數據寫入到addAttribute對象中,進行數據傳遞

 @RequestMapping("r2")public String res2(Model model){//springMVC推薦使Model進行model.addAttribute("msg","model 傳參");return "resp";}

4.使用ModelAndView傳遞數據:

首先在方法中創建ModelAndView對象,使用addObject方法傳遞數據,使用setViewName設置要跳轉的頁面,注意方法的返回值也是ModelAndView類型

@RequestMapping("resp5")public ModelAndView method(){ModelAndView mv=new ModelAndView();//使用addObject方法傳遞參數mv.addObject("msg","ModelAndView傳參");//使用setViewName方法設置跳轉頁面mv.setViewName("resp2");return mv;}

以上四種返回數據的方式都可以使用,效率上也幾乎無差別,沒有具體的好與壞,想要使用哪種看自己的個人喜好

三,文件上傳

  • Spring MVC 為文件上傳提供了直接的支持,這種支持是通 過即插即用的 MultipartResolver 實現的。Spring 用 Jakarta CommonsFileUpload 技術實現了一個 MultipartResolver 實現類:CommonsMultipartResovler
  • Spring MVC 上下文中默認沒有裝配 MultipartResovler,因 此默認情況下不能處理文件的上傳工作,如果想使用 Spring 的文件上傳功能,需現在上下文中配置 MultipartResolver

配置CommonsMultipartResolver

首先配置編碼,必須跟jsp文件中的編碼保持一致
maxUploadSize用來配置最大支持的文件大小,默認是不限制,單位是byte

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><property name="defaultEncoding" value="UTF-8"/><property name="maxUploadSize" value="5242880"/></bean>

導入上傳文件需要的jar包

<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.3</version></dependency>

編寫上傳的jsp頁面

注意enctype屬性,如果不加是無法上傳文件的

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>file</title>
</head>
<body><form action="upload" method="post" enctype="multipart/form-data"><input type="file" name="file"><br/><input type="submit" value="上傳">
</form>
</body>
</html>

編寫用于上傳的controller方法

注意參數類型,一定要用RequestParam注解標注,否則報錯

@RequestMapping("upload")public String upload(@RequestParam("file")MultipartFile file) throws Exception{//獲取文件原名System.out.println(file.getOriginalFilename());String path="D:\\Java\\"+file.getOriginalFilename();file.transferTo(new File(path));return "hello";}

四,處理JSON數據

什么是JSON數據格式

JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。JSON采用完全獨立于語言的文本格式,這些特性使JSON成為理想的數據交換語言。易于人閱讀和編寫,同時也易于機器解析和生成。

JSON建構于兩種結構:

  • “名稱/值”對的集合(A collection of name/value pairs)。相當于Java中的Map
  • 值的有序列表(An ordered list of values)。在大部分語言中,它被理解為數組(array)。

JSON數據格式

{
"name": "張三",
"age": 20,
"email": "5689876@qq.com",
"phone": "15122334455",
}

這就是一段最簡單的JSON格式的數據

SpringMVC返回JSON

1.配置jar包
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.11.2</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.11.2</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.11.2</version></dependency>
2.配置文件中添加<mvc:annotation-driven/>標簽
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:comtext="http://www.springframework.org/schema/context"xmlns:avc="http://www.springframework.org/schema/cache"xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd"><avc:annotation-driven/><comtext:component-scan base-package="com.haina.springmvc"/><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/"></property><property name="suffix" value=".jsp"></property></bean><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><property name="defaultEncoding" value="UTF-8"/><property name="maxUploadSize" value="5242880"/></bean>
</beans>
3.添加方法
package com.haina.springmvc;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@Controller
public class JSONController {//ResponseBody注解的作用是讓該方法不再跳轉頁面,而是返回JSON格式的數據@RequestMapping("j1")@ResponseBodypublic Map<String,Object> j1(){Map<String,Object> map=new HashMap<String, Object>();map.put("code",1001);map.put("msg","success");return map;}@RequestMapping("j2")@ResponseBodypublic Student j2(){Student st=new Student();st.setNo(1234);st.setName("張三");st.setAge(20);st.setMajor("計算機");return st;}@RequestMapping("j3")@ResponseBodypublic List<Student> j3(){List<Student> list=new ArrayList<Student>();for (int i=0;i<10;i++){Student st=new Student();st.setNo(1234+i);st.setName("張三"+i);st.setAge(20+i);st.setMajor("計算機"+i);list.add(st);}return list;}}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/90076.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/90076.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/90076.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

OpenCV 人臉分析----人臉識別的一個經典類cv::face::EigenFaceRecognizer

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 這是基于 PCA&#xff08;主成分分析&#xff09; 的人臉識別算法實現。它通過將人臉圖像投影到一個低維的“特征臉”空間中進行識別&#xff0c…

RESTful風格

帶著問題&#xff0c;找答案&#xff1a; 通過本片文章&#xff0c;你會了解以下四點。并且我會給出go語言的實現案例。 1、了解restful風格的來源、起源、演變史 2、了解restful風格的定義、含義 3、掌握restful風格的簡單運用 4、做一個小demo 在restful中前進&#xf…

了解GC嗎?什么是GC?

GC是什么&#xff1f;為什么要GC&#xff1f; GC&#xff08; Garbage Collection &#xff09;&#xff0c;垃圾回收&#xff0c;是Java與C的主要區別之一。作為Java開發者&#xff0c;一般不需要專門編寫內存回收和垃圾清理代碼。這是因為在Java虛擬機中&#xff0c;存在自動…

FDMA讀寫AXI BRAM交互:FPGA高速數據傳輸的核心技術

在圖像處理系統中,當1080P視頻流以每秒60幀的速度傳輸時,傳統DMA每幀會浪費27%的帶寬在地址管理上——而FDMA技術能將這些損失降至3%以內 現代FPGA系統中,高效數據搬運往往是性能瓶頸的關鍵所在。當你在手機上流暢播放4K視頻、在自動駕駛系統中實時處理激光雷達點云時,背后…

獨立開發A/B測試實用教程

A/B測試&#xff08;A/B Testing&#xff09;&#xff0c;又稱分組測試、對照實驗&#xff0c;是產品開發和運營中提升轉化率、優化用戶體驗的常用方法。無論你是做App、SaaS、網站還是小程序&#xff0c;合理地利用A/B測試&#xff0c;都能幫助你用數據驅動決策&#xff0c;讓…

如何將iPhone備份到Mac/MacBook

許多iPhone用戶非常重視備份&#xff0c;但在Mac上選擇合適的備份方法可能會令人困惑。市場上有各種各樣的備份工具&#xff0c;找到一個既易于使用又能保存所有重要數據&#xff08;如照片、視頻、消息、WhatsApp聊天記錄和聯系人&#xff09;的工具至關重要。如果你正在尋找一…

Logseq 插件開發實戰四:發布到官方插件市場

&#x1f6a9;系列回顧 初識插件機制并實現自動壓縮粘貼的圖片國際化 I18N 與配置多語言自定義斜線命令 SlashCommand發布到官方插件市場 開源地址&#xff1a;logseq-plugin-image-tiny&#xff0c;歡迎來?。 &#x1f41e; 插件上線問題記錄 問題描述 本地插件開發完成后…

[netty5: ByteToMessageCodec MessageToByteEncoder ByteToMessageDecoder]-源碼分析

ByteToMessageCodec ByteToMessageCodec 是一個結合了 ByteToMessageDecoder 和 MessageToByteEncoder 的編解碼器&#xff0c;可以實時地將字節流編碼或解碼為消息&#xff0c;反之亦然。 public abstract class ByteToMessageCodec<I> extends ChannelHandlerAdapter {…

Ubuntu20.04安裝mujoco210, mujoco-py時的報錯處理

參考 Ubantu 20.04 安裝 Mujoco210、mujoco-py、gym及報錯解決 安裝 mujoco210 創建 .mujoco 文件夾 mkdir ~/.mujoco親測必須是 .mujoco 文件夾&#xff0c;不然會報錯&#xff01; 下載 mujoco210-linux-x86_64.tar.gz 并解壓到 .mujoco 文件夾 mojoco下載地址 測試 mojo…

全志T507 音頻ALSA核心層注冊流程分析

一.ALSA核心層注冊流程分析 驅動目錄&#xff1a;kernel-4.9/sound/core/sound.c struct file_operations snd_fops {.owner THIS_MODULE,.open snd_open, (inode, file)---->struct snd_minor *mptr snd_minors[minor];---->file->f_op fops_get(mptr->f_ops…

評論區實現 前端Vue

根據后端部分定義評論區功能實現 golang后端部分-CSDN博客&#xff0c;重點需要實現三個部分&#xff0c;1.當前用戶發起新根評論請求&#xff1b;2.評論區展示部分&#xff1b;3.某一根評論的子評論展示以及回復組件顯示。 整體流程解釋 數據從后端接收&#xff0c;整體在in…

差分定位技術:原理、分類與應用場景

文章目錄 簡介基本概念位置差分偽距差分載波相位 差分定位技術精密單點定位&#xff08;PPP&#xff09;差分全球定位系統&#xff08;DGPS&#xff09;實時動態定位&#xff08;RTK&#xff09; 應用場景總結 簡介 差分定位&#xff08;Differential Positioning&#xff09;是…

tomcat的tar包轉換成rpm包的保姆級教程

環境說明 &#xff1a;centos 71. 安裝打包工具&#xff1a;yum install -y rpm-build rpmdevtools2. 創建 RPM 打包環境&#xff1a;rpmdev-setuptree?輸入之后是下面的結果~/rpmbuild/ ├── BUILD ├── RPMS ├── SOURCES ├── SPECS └── SRPMS?準備 Tomcat 源碼…

【牛客算法】小美的數組刪除

文章目錄 一、題目介紹二、解題思路三、解題算法實現四、算法分析4.1 代碼邏輯4.2 逆向遍歷求MEX的設計精妙之處4.2.1 逆向遍歷:解決MEX更新的連續性4.2.2 利用MEX的單調性4.2.3 空間復用與狀態壓縮4.2.4 與問題特性的完美契合4.2.5 總結:為什么說這個設計“妙”?五、算法復…

MyBatisPlus-01-環境初始化及簡單應用

文章目錄【README】【1】springboot集成mybatis-plus配置【1.1】目錄結構【相關說明】【1.2】代碼示例【pom.xml】【application.properties】【MybatisPlusNoteController】【UserAppService】【UserMapper】【UserPO】【建表語句】【2】演示【README】 本文代碼參見&#xf…

Web爬蟲編程語言選擇指南

剛學爬蟲的小伙伴常常為選擇那種語言來寫爬蟲而煩惱&#xff0c;今天我將總結幾種語言的優劣勢&#xff0c;然后選擇適合編寫 Web爬蟲 的編程語言。這就需要我們考慮開發效率、生態庫支持、并發性能等因素。以下是主流選擇及特點跟著一起看看吧&#xff1a; 1. Python&#xff…

學習日志06 python

加油&#xff0c;今天的任務是學習面向對象編程&#xff0c;設計一個簡單的寵物管理系統&#xff08;寵物類、貓 / 狗子類&#xff09;&#xff0c;先做5道題目開啟學習狀態吧&#xff01;1 setdefault()在 Python 中&#xff0c;setdefault() 是字典&#xff08;dict&#xff…

基于Java+springboot 的車險理賠信息管理系統

源碼、數據庫、包調試源碼編號&#xff1a;S595源碼名稱&#xff1a;基于springboot 的車險理賠信息管理系統用戶類型&#xff1a;多角色&#xff0c;用戶、事故調查員、管理員數據庫表數量&#xff1a;14 張表主要技術&#xff1a;Java、Vue、ElementUl 、SpringBoot、Maven運…

MyDockFinder 綠色便攜版 | 一鍵仿Mac桌面,非常簡單

如果你既不想升級到Win11&#xff0c;又想體驗Mac桌面的高級感&#xff0c;那么MyDockFinder將是你的最佳選擇。這是一款專為Windows系統設計的桌面美化工具&#xff0c;能夠將你的桌面轉變成MacOS的風格。它提供了類似Dock欄和Finder的功能&#xff0c;讓你在不更換操作系統的…

Babylon.js 材質克隆與紋理共享:你可能遇到的問題及解決方案

在 Babylon.js 中&#xff0c;材質&#xff08;Material&#xff09;和紋理&#xff08;Texture&#xff09;的克隆行為可能會影響渲染性能和內存管理&#xff0c;尤其是在多個材質共享同一紋理的情況下。本文將探討&#xff1a;PBRMetallicRoughnessMaterial 的克隆機制&#…