前台数据提交后台,数组、数组对象,接收 OR 提交 卡在了哪里?

前台提交到后台的数据类型,最常用的主要有这几种:对象、单个数据类型、数组、数组对象。其中对象最为常用,对象也可分为两种提交方式,一种是表单提交,一种是使用ajax提交,对于前后端分离的项目来说,最常用的则是ajax提交。

对象里面包括多个属性,每个属性可以是不同的基本数据类型,比如String字符串类型,Byte类型,Integer类型,datetime数据类型等等。

如果没有对应的对象,能否把一个表单中的数据封装一个map集合,提交到后台呢,实践证明也是可以的,只不过需要将这个map集合先封装到对象里。这种情况也是有使用场景的,比如把查询表单中的所有查询条件,封装成一个map集合,传递到后台,进行查询操作。这样写可以省下不少代码,后期维护起来也方便。

单个数据类型,就是单一的一个属性,比如一个String字符串类型,一个Byte类型,一个Integer类型等等。
数组,可以是String字符串数组,也可以是Integer数组,同一数据类型的数组。

数组对象,则是一种对象的集合,这种比较少用,但是会有用到的地方,比如批量提交表单,则会用到数组对象。

简单用springboot搭了一个简易的svn项目,对于上面的这几种类型做个demo。
后台代码如下:

importorg.springframework.web.bind.annotation.GetMapping;
importorg.springframework.web.bind.annotation.PathVariable;
importorg.springframework.web.bind.annotation.PostMapping;
importorg.springframework.web.bind.annotation.RequestBody;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.RestController;
importorg.springframework.web.servlet.ModelAndView;
 
importcom.example.demo.entity.Pager;
importcom.example.demo.entity.Test;
 
/**
 * 数据类型接收测试
 * @author 程就人生
 * @date 2019年9月3日
 */
@RequestMapping("/test")
@RestController
public class TestController {
 
    /**
     * 初始化页面
     * @return
     *
     */
    @GetMapping("/index")
    public ModelAndView index(){     
        return new ModelAndView("/index");
    }
   
    /**
     * 以路径path的形式放在请求的路径后面
     * @param userUid
     * @return
     *
     */
    @GetMapping("/{userUid}")
    public Object get(@PathVariable String userUid){
        System.out.println("1:" + userUid);
        return userUid;
    }
   
    /**
     * 直接接收,前台可以是传统的放在问号后面,也可以放在data里
     * @param userUid
     * @return
     *
     */
    @GetMapping
    public Object get2(String userUid){
        System.out.println("1a:" + userUid);
        return userUid;
    }
   
    /**
     * 对字符串数组的接收,第一种写法,用可变参数接收
     * @param userUids 用可变参数接收,接收到的形式为包含一个字符串或多个字符串的数组
     * @return
     *
     */
    @GetMapping("/array")
    public Object getArray(String... userUids){
        for(String userUid : userUids){
            System.out.println("2:" + userUid);
        }
        return userUids;
    }
   
    /**
     * 对数组的接收,第二种写法,比较传统的写法
     * @param userUids
     * @return
     *
     */
    @GetMapping("/array2")
    public Object getArray2(String[] userUids){
        for(String userUid : userUids){
            System.out.println("2a:" + userUid);
        }
        return userUids;
    }
       
    /**
     * 对象的接收,可以用form表单提交,或者放在ajax请求的data里面,放在data里面时,需要进行序列化处理
     * @param test
     * @return
     *
     */
    @PostMapping
    public Object add(Test test){
        System.out.println("3:" + test.getUserName());
        System.out.println("3:" + test.getUserPwd());
        return test;
    }
   
    /**
     * 对数组对象的接收,前台必须是以json的形式发送请求
     * @RequestBody代表前台必须使用ajax请求,并且contentType类型必须为:"application/json"
     * 前台传递过来的数据还必须使用JSON.stringify()转换为一个 JSON字符串
     * @param testList
     * @return
     *
     */
    @PostMapping("/array")
    public Object addArray(@RequestBodyTest... testList){
        for(Test test : testList){
            System.out.println("4:" + test.getUserName());
            System.out.println("4:" + test.getUserPwd());
        }
        return testList;
    }  
   
    /**
     * 提交map集合,把map集合放在一个对象里面,作为对象的一个属性进行传递
     * @param map
     * @return
     *
     */
    @GetMapping("/list")
    public Object searchByCriteria(Pager pager){ 
        System.out.println("5:" + pager.getCondition().get("userName2"));
        System.out.println("5:" + pager.getCondition().get("userPwd2"));
        return pager;
    }
}

前台页面代码如下:




    
    
 
    新增
 
    
    
 
    
    
       

   
    

启动项目,界面如下:



界面有点丑,没有美化,没有css文件,js文件只引用了jquery,运行结果还是很漂亮的:



总结
这个demo中的后台方法命名,基本上遵循了RESTFul设计风格,即使练习也要遵守规范,养成一个好的习惯吧。有时由于前后台分离,昨天用过的方法,可能几天不写就忘记了,像上面的数组,数组对象的处理,每次用时都要搜一搜怎么写的,这次又用到了,既然如此,就整理一个全面的demo,以备后用。

你可能感兴趣的:(前台数据提交后台,数组、数组对象,接收 OR 提交 卡在了哪里?)