前言

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。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐