Spring Boot接收从前端传过来的数据常用方式以及处理的技巧

本文介绍了SpringBoot中前端通过body向后端传递数据的多种常见方式,包括非JSON格式的字符串、实体类封装、Restful风格的路径变量以及处理JSON数据(直接映射到Pojo、复杂类型和Map)。
摘要由CSDN通过智能技术生成

Spring Boot接收从前端传过来的数据常用方式以及处理的技巧_spring boot前端使用body传参后端改如何接收-CSDN博客

 角度1:是否是json格式的数据

  1. 前端传递过来的数据类型,老师这里会把它分为两个主要的方向:
    1. 第1个方向:非json格式的数据
    2. 第2个方向:json格式的数据
package com.controller;
 
import com.pojo.User;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
import javax.servlet.http.HttpServletRequest;
import java.util.Map;
 
@RequestMapping("users")
@RestController
public class UserController {
    /*
    * 非json格式
    *   第1种方式:如果有数据从前端过来,后端直接把这些数据都当成(看作是)字符串。
    *   如:
    *       String username:如果你前端传输过来的用户名,后端直接看成字符串来接收。
    *       String password:如果你前端传输过来的密码,后端直接看成字符串来接收。
    */
    @RequestMapping("add1")
    public String add1(String username,String password){
        System.out.println("username = "+username);
        System.out.println("password = "+ password);
        return "success";
    }
 
    /*
     * 非json格式
     *   第2种方式:把前端传输过来的参数,后端封装成一个实体类。
     *   如:
     *      把前端传输过来的参数,(后端)封装到User user实体类中。
     */
    @RequestMapping("add2")
    public String add2(User user){
        System.out.println(user);
        return "success";
    }
 
    /*
     * 非json格式
     *   第3种方式:restful风格:get请求:localhost:8080/users/add3?tom/123456
     *   注意:
     *   (1)@RequestMapping支持变量占位符的写法。如:@RequestMapping("add3/{username}/{password}"),其中的{username}和{password}是变量占位符,而其中的username和password是变量名称。
     *   (2)@RequestMapping只是成功接收到前端传输的数据,我们是还是把数据放到方法的参数列表中。
     *   (3)使用@PathVariable注解,可以指定请求路径中的哪个变量(@RequestMapping接收的参数)与add3参数列表中的哪个参数对应起来。
     *         1)如果@RequestMapping的变量名称和add3参数列表中的参数名称一致,只需要加@PathVariable即可,它会自动注入。
     *         2)如果名称不一致,@RequestMapping("add3/{name}/{password}") 》 add3(@PathVariable("name") String username, @PathVariable String password)
     */
    @RequestMapping("add3/{name}/{password}")
    public String add3(@PathVariable("name") String username, @PathVariable String password){
        System.out.println(username+" / "+password);
        return "success";
    }
 
    /*
     * 非json格式
     *   第4种方式:借助HttpServletRequest对象来接收
     *            无论前端提交的数据是简单类型的还是复杂类型的,都会整体被打包放在HttpServletRequest对象中传输到后端了。
     *   注:
     *      (1)通过HttpServletRequest对象中的数据是以key- value的键值对的形式存储的。比如,key就是前端的参数名称username=tom - (key就是username)
     *      (2)通过HttpServletRequest,不光可以获取到前端提交的数据,还可以获取到关于前端的其它信息,如http协议版本、请求url、提交的数据的类型等
     */
    @RequestMapping("add4")
    public String add4(HttpServletRequest request){
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        System.out.println(username+"//"+password);
        return "success";
    }
 
    /*
     *  json格式
     *   第1种:后端会将前端传递过来的json数据直接封装到pojo对象中。
     *   注意:
     *      (1)这种方式在前端提交数据的时候,不能够在postman Body和postman Query中使用key=value的方式进行提交,而是通过json来提交
     */
    @RequestMapping("add5")
    public User add5(@RequestBody User user){
        System.out.println(user.toString());
        return user;
    }
 
    /*
     *  json格式
     *   第2种:实体类对象中有除了有基本数据类型外,还有复杂数据类型的出现
     */
    @RequestMapping("add6")
    public User add6(@RequestBody User user){
        System.out.println(user.toString());
        return user;
    }
 
    /*
     *  json格式
     *   第3种:实体类对象中有List集合
     */
    @RequestMapping("add7")
    public User add7(@RequestBody User user){
        System.out.println(user.toString());
        return user;
    }
 
 
    /*
     *  json格式
     *   第4种:Map<String,String>
     *         因为在java看来json本质意义上就是一种map结构的内容。
     *   如:key分别会是"username"和"password"
     *      {
     *          "username":"tom",
     *          "password":"123456"
     *      }
     */
    @RequestMapping("add8")
    public String add8(@RequestBody Map<String,String> map){
        System.out.println(map.get("username"));
        System.out.println(map.get("password"));
        return "success";
    }
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值