Springboot前后端参数传递
·
文章目录
前言
Springboot是SpringMVC的高度集成,而SpringMVC底层是封装了servlet的。所以在编写Springboot的Controller类时,可以引入servlet类的编写风格,即可以使用servlet的HttpServletRequest请求对象和HttpServletResponse响应对象,来对前端请求进行处理。在下面几种Springboot参数传递的写法中,可以清晰地感觉到。
一、构建Maven项目,引入Springboot依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
Springboot里默认加入了jackson-databind作为JSON处理器,所以不需要添加其它额外的JSON处理器。
二、MVC风格的参数传递
1.前端核心代码
代码如下(示例):
function createXML(){
if(window.XMLHttpRequest)
// DOM 2 浏览器
{XMLHttpReq = new XMLHttpRequest();}
else if(window.ActiveXObject)
{//1 IE 浏览器
try
{XMLHttpReq= new Activexobject("Msxm12.XMLHTTP");}
catch(e)
{try
{XMLHttpReq = new ActivexObject("Microsoft.XMLHTTP")}
catch(e){}
}}//在考虑不同浏览器的兼容问题下,创建一个XMLHttpRequest对象
}
function sendZCrequest(){//注册请求
let username = document.getElementById("username").value;
let password = document.getElementById("password").value;
createXML();
XMLHttpReq.open("post","verify",true);// 通过open()方法取得与服务器的连接,发送POST请求
XMLHttpReq.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");// 设置请求头-发送 POST 请求时需要该请求头
XMLHttpReq.onreadystatechange = processResponse;// 指定 XMLHttpRequest 状态改变时的处理函数
XMLHttpReq.send("username="+username+"&password="+password);
}
function processResponse(){
if(XMLHttpReq.readyState == 4){
if(XMLHttpReq.status == 200){
let app = document.getElementById("prompt");
if(app.hasChildNodes())
{app.removeChild(app.firstChild);}
let txt1=JSON.parse(XMLHttpReq.responseText);
let txt=document.createTextNode("username是"+txt1.username+"password是"+txt1.password);
app.appendChild(txt);
}
else{
window.alert("资源加载出现错误!!");
}
}
}
ajax异步发送数据,发送数据参数名为username和password。
用JSON.parse(XMLHttpReq.responseText)将接受到的Json字符串,转化成对应的Json对象或Json数组。
2.后端pojo类
代码如下(示例):
public class user {
private String username;
private String password;
public String getPassword() {
return password;
}
public String getUsername(){
return username;
}
public void setPassword(String password) {
this.password = password;
}
public void setUsername(String username) {
this.username = username;
}
}
pojo类里的成员变量名要与前端发送数据的参数名一一对应(名字要相同)! 否则传递会为null。
如果想要某个成员变量被JSON处理器忽略,可以用@JsonIgnore在其上方注解。
3.后端controller类
代码如下(示例):
@RestController
public class jsoncontroller {
@PostMapping("/verify")
public user verify(String username,String password){
user User = new user();
User.setPassword(password);
User.setUsername(username);
return User;
}
}
verify方法里的形参名要和前端发送数据的参数名要一一对应(名称要保持一致,前端数据才会被后端接口捕获)。
直接返回pojo对象(user),该对象会被jackson-databind封装成Json字符串,再进行发送。
三、servlet风格的参数传递
1.后端controller类
代码如下(示例):
@RestController
public class servletcontroller {
@PostMapping("servlet")
public void httpservlet(HttpServletRequest request, HttpServletResponse response) throws IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
response.setContentType("text/html;charset=UTF-8");
response.getWriter().println("{\"username\":"+username+","+"\"password\":"+password+"}");
}
}
接口方法返回类型是void,response.getWriter()获取HttpServletResponse对象的 PrintWriter(打印输出流,封装了FileOutputStream)。response进而通过 PrintWriter来输出响应内容。
request.getParameter()方法里面的参数名必须要和前端发送数据的参数名对应,这样才能获取前端对应的数据内容。
四、总结
Springboot和SpringMVC是逃不开Servlet的,它们的底层或多或少都存在着Servlet。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)