前端发送请求,后端如何接收数据

本文中使用Postman来模拟前端发送请求。

1.前端发送一个POST请求(application/x-www-form-urlencoded类型),请求中有参数bookName ,其值是中文。
在这里插入图片描述在这里插入图片描述
2.后端进行接收,我们这里写的是,使用Controller接收,当然也可以使用servlet类,只要能获取到请求request。
方法一:使用HttpServletRequest

  @CrossOrigin
  @RequestMapping(value = "/api/findBookByName", method = RequestMethod.POST)
  @ResponseBody
   	public void deleteBookByNumber(HttpServletRequest request, HttpServletResponse response) throws Exception{
	request.setCharacterEncoding("utf-8");	
	String bookName = request.getParameter("bookName");
	System.out.println(bookName);
	
}

这里因为前端发送的是application/x-www-form-urlencoded编码类型,所以我们可以直接从获取前端的请求参数—> request.getParameter("bookName")。因为中文乱码,所以这里设置字符编码方式。
方法二:使用注解@RequestParam

@CrossOrigin
@RequestMapping(value = "/api/findBookByName", method = RequestMethod.POST)
@ResponseBody
public void deleteBookByNumber(@RequestParam("bookName") String bookName) throws Exception{
		bookName=new String(bookName.getBytes("ISO-8859-1"), "utf-8");
		System.out.println(bookName);
}

这里也可以使用@RequestParam("bookName")获取请求参数。因为GET和POST请求传的参数会自动转换赋值到@RequestParam 所注解的变量上。
RequestParam实质是将Request.getParameter() 中的Key-Value参数Map利用Spring的转化机制ConversionService配置,转化成参数接收对象或字段。所以这个方法只能针对application/x-www-form-urlencoded编码类型使用。
在ConversionService类里面,将请求参数的编号方式设为ISO-8859-1,所以我们需要修改为utf-8.

这里写了针对application/x-www-form-urlencoded编码类型的二种后台接收方式,但是都需要对中文乱码问题进行处理,其实还有一种更为简便的方法。设置字符过滤器(文章链接)

上面我们说了,对于application/x-www-form-urlencoded编码类型的后台接收方式。现在我们说说对于application/json编码类型的后台接收方式。

3,前端发送一个POST请求(application/json类型),请求中有参数bookName ,其值是中文。
在这里插入图片描述

4,后台接收application/json类型的POST请求。
方法一:使用@ResponseBody注解,定义包含所有参数的对象,直接封装到对象属性中

@CrossOrigin
@RequestMapping(value = "/api/deleteBook", method = RequestMethod.POST)
@ResponseBody
public Boolean deleteBook(@RequestBody String map) throws Exception{
	JSONObject mapJson=JSONObject.fromObject(map);
	if(mapJson!=null) {
		bookmapper.deleteBook(String.valueOf(mapJson.get("bookNumber")));
		return true;
	}
	
	return false;
}

这里我们暂时使用了String类封装了所有的参数对象,然后使用JSONObject.fromObject()将String类型转化为JSON对象,使用JSONObject .get("") 方法提取名称对应的键值。这里提一下JSON.parse()的作用是将JSON字符串转化为JSON对象。这里仍会出现中文乱码问题,请照上面2中的方法一、二进行修改。

方法二:通过request获取流,

@CrossOrigin
@RequestMapping(value = "/api/findBookByName", method = RequestMethod.POST)
@ResponseBody
public void deleteBookByNumber(HttpServletRequest request, HttpServletResponse response) throws Exception{
	String s = StreamUtils.copyToString(request.getInputStream(), Charset.forName("UTF-8"));
	JSONObject mapJson=JSONObject.fromObject(s); 
}

使用从request中获取流,并设置中文编码,封装到一个String对象中。将String转化为JSON,我们就可以提取名称对应的键值。

最后,我比较推荐使用注解方式,并且使用JSON类型。因为我们可以直接将JSON对象转化为我们自定义类对象。感觉用起来比较方便,当然如果是参数很少,使用@RequestParam更加方便。

5.前端如何获取后台返回的数据。
   这里我举一个例子,如后台返回这种数组:
在这里插入图片描述
我在前端 通过 res.data 获取到的会是json字符串,这里我就可以用过函数JSON.parse(res.data)将json字符串转化为json对象,这里前端获取的就是这样的数组
在这里插入图片描述
多说一句: JSON.stringify()函数是将json对象转化为对应的json 字符串。

  • 29
    点赞
  • 175
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
要让前端发送请求后,后端能够接收并查询相关数据库,你可以按照以下步骤进行操作: 1. 在前端,使用 JavaScript 或其他适合的语言编写代码,通过 AJAX 或 Fetch API 发送 HTTP 请求后端。你可以使用 `XMLHttpRequest` 对象或现代浏览器中更常用的 `fetch` 函数来发送请求。 ```javascript fetch('/api/json_api.jsp', { method: 'POST', body: JSON.stringify(data), // 可选,如果需要发送数据后端 headers: { 'Content-Type': 'application/json' // 根据实际情况设置请求头 } }) .then(response => response.json()) .then(data => { // 处理从后端返回的数据 }) .catch(error => { // 处理请求错误 }); ``` 2. 在后端,根据你的后端技术选择合适的框架或库,例如 Go 的标准库 `net/http`、Gin、Echo 等。在你的路由处理函数中,根据请求路径和方法,编写相应的处理逻辑来接收请求。 ```go func ApiHandle(w http.ResponseWriter, r *http.Request) { // 处理请求逻辑 // 查询数据库 // ... // 将结果返回给前端 // ... } ``` 3. 在后端处理函数中,根据你的需求连接数据库,并执行相应的查询操作。具体的数据库查询操作和语法将取决于你使用的数据库类型和相关库。 ```go func ApiHandle(w http.ResponseWriter, r *http.Request) { // 连接数据库 db, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/database") if err != nil { // 处理数据库连接错误 } defer db.Close() // 执行查询操作 rows, err := db.Query("SELECT * FROM table") if err != nil { // 处理查询错误 } defer rows.Close() // 处理查询结果 // ... } ``` 4. 在后端处理函数中,将查询结果转换为适当的数据格式(例如 JSON),并通过 HTTP 响应将数据发送前端。 ```go func ApiHandle(w http.ResponseWriter, r *http.Request) { // ... // 将查询结果转换为适当的数据格式,例如 JSON result := []string{"data1", "data2"} // 设置响应头 w.Header().Set("Content-Type", "application/json") // 将数据写入响应体 json.NewEncoder(w).Encode(result) } ``` 这些是实现前端发送请求后,后端接收并查询相关数据库的基本步骤。根据你使用的具体技术和需求,可能会有一些细微的差异。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云淡风轻~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值