前端发送请求,后端如何接收数据
-
假若前端发送一个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); }
-
-
假若前端发送一个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