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

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

  1. 假若前端发送一个POST请求Content-Type(application/x-www-form-urlencoded编码类型的),请求参数bookName,其值是中文

    • 方法一:使用HttpServletRequest (HttpServletRequest代表客户端的请求,用户通过http协议访问服务器,HTTP请求中的所有信息会被疯转到HttpServletRequest,通过这个Request集合方法可以获得客户端的所有信息)

        @CrossOrigin //处理跨域请求的注解
        @RequestMapping(value = "/api/findBookByName", method = RequestMethod.POST)//将请求和处理请求的控制器方法关联起来,建立映射关系
        @ResponseBody //作用其实是将java对象转为json格式的数据。是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区
         	public void deleteBookByNumber(HttpServletRequest request, HttpServletResponse response) throws Exception{
       // 设置request对象的解码方式
      	request.setCharacterEncoding("utf-8");	
      	String bookName = request.getParameter("bookName");
      	System.out.println(bookName);
      	
      }
      
      
    • 方法二 使用注解@RequestParam (RequestParam实质是将Request.getParameter() 中的Key-Value参数Map利用Spring的转化机制)

    ​ @RequestParam(“bookName”) 因为参数是中文会乱码,所以设置字符编码的方式

    • @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);
      }
      
  2. 假若前端发送一个POST请求(application/json类型),请求中有参数bookName,其值是中文

    • 方法一 使用注解@ResponseBody注解,定义包含所有参数的对象,直接封装到对象属性中

      • 使用了String类封装了所有的参数对象,然后使用JSONObject.fromObject()将String类型转化为JSON对象,使用JSONObject .get(“”) 方法提取名称对应的键值。这里提一下JSON.parse()的作用是将JSON字符串转化为JSON对象。这里仍会出现中文乱码问题,请照上面一中的方法一、二进行修改
      @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;
      }
      
    • 方法二 通过request获取流

      • 从request中获取流,并设置中文编码,封装到一个String对象中。将String转化为JSON,我们就可以提取名称对应的键值。
      @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); 
      }
      

​ 若是前端获取到的res.data是json字符串形式,可以用 函数JSON.parse(res.data)将json字符串转换回去

最后,我比较推荐使用注解方式,并且使用JSON类型。因为我们可以直接将JSON对象转化为我们自定义类对象。感觉用起来比较方便,当然如果是参数很少,使用@RequestParam更加方便
————————————————
版权声明:本文为CSDN博主「云淡风轻~~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_39668099/article/details/90375826

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值