踩坑笔记(后端)

一、前端 往 后端传参的六种方式

1. 请求体在url中(2)
2. 请求体以单个参数 或 JSON对象的方式传送 (2)
3. 请求体以表单的形式传送:简单表单、复杂表单 (2)

. 请求体在url中
	1.1 url: "/yourUrl/"+yourData
		==> 
		@RequestMapping("/yourUrl/{yourDataName}")
		public String yourUrl(@PathVariable("yourDataName") String yourData) {
			// @PathVariable("yourDataName")必不可少,因为他指定链接中某个位置代表着名为yourDataName的变量
		}
		    
	1.2 url: "/yourUrl?yourDataName=" + yourData
		==> 
		@RequestMapping("/yourUrl")
		public String yourUrl(@RequestParam("yourDataName") String yourData) {
			//@RequestParam("yourDataName")是必不可少的,因为他指定了链接中的参数名称
		}
	
	二、请求体以单个参数 或 JSON对象的方式传送	
	2.1 url: "/yourUrl", 
        data: { 
            "username": "admin", 
            "password": "admin"
        }
        ==> 
        @RequestMapping("/yourUrl")
   	 	public String yourUrl(@RequestParam("username") String username,
   	 							 @RequestParam("password") String password) {}	
   	 	
  	2.1 url: "/yourUrl", 
		data: JSON.stringify(conceptMap),
		==> 
		@RequestMapping("/yourUrl")
  	 	public String yourUrl(@RequestBody()ConceptMap conceptMap) {}	

	三、请求体以表单的形式传送:简单表单、复杂表单
	3.1 url: "/yourUrl", 
        data:formData.serialize() // 对表单数据进行序列化并传递到后台
		==>
		@RequestMapping("/yourUrl")
	    public String yourUrl(@RequestParam("user") String jsonObject){
	    	User user= JSON.parseObject(jsonObject, User.class);
	    	// 接收表单时 无法使用 @RequestBody 
		}
		序列化 与 反序列化
		对象 → 字节 → 对象
		
	3.2 var formData = new FormData();
		formData.append("upGeoIcon",$('#fileInput')[0].files[0]);
		formData.appen("geoIcon",JSON.stringify(geoIcon));
		...
		url: "/yourUrl", 
        data:formData.serialize() 
		==>
		@RequestMapping("/yourUrl")
	    public String yourUrl(@RequestParam("upGeoIcon") MultipartFile mfile,
	    						@RequestParam("geoIcon") String jsonObject){
	    	GeoIcon geoIcon = JSON.parseObject(jsonObject, GeoIcon.class);
	    	// 接收表单时 无法使用 @RequestBody 
		}
	

二、前端 传 数组,后端List<Object> 接收

1、需要将数组先转成字符串,后端再将字符串解析成ModelParam类型的List<>列表

	modelParams = [{...},{...}];
	...
	url: "/saveIntegratedTask", 
    data: JSON.stringify(modelParams),
    ==>
    @RequestMapping(value = "/saveIntegratedTask")
    JsonResult saveIntegratedTask(@RequestParam("modelParams") String modelParams){
    	List<ModelParam> params = JSON.parseArray(modelParams,ModelParam.class);
    	...	
    }
     

三、@RequestParam、@RequestBody 和 @PathVariable

  1. @RequestBody ajax中声明contentType: “application/json; charset=utf-8”,也就是json数据

    注意:

  2. 前后参数必须一致;
    高级的表达:将http的输入流装配到目标类时,会根据json的key来匹配目标类的属性

  3. 一般使用在post请求中;


  1. @RequestParam ajax没有声明contentType,即默认时,用这个。
  2. 注意:
  3. 可以使用在get、post请求中

  1. @PathVariable 参数放url中时
  2. @RequestMapping("/yourUrl/{yourDataName}")

对比:

  1. 一个请求,只有一个RequestBody;一个请求,可以有多个RequestParam。
  2. RequestBody 接收的是请求体里面的数据;而RequestParam接收的是key-value里面的参数。

四、java 浅拷贝与深拷贝

	@Data
	public class Student implements Cloneable { 
		String subj; 
		String name; 
	    @Override  
		public Object clone() {  
		    Student stu =(Student)super.clone();  
		    return stu;  
		}  
	}
	...
	Student stu1 = new Student({"chinese","ming"});
	Student stu2 = (Student) stu1.clone();	//深拷贝

五、spring boot 配置静态文件


	spring.mvc.static-path-pattern=/static/**   //定义访问模式
	
	resourcePath=D:/upload

	spring.http.multipart.locations=${resourcePath}
	spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/, 
									classpath:/static/, classpath:/public/, file:${spring.http.multipart.locations} 


六、MongoDB 更新记录

save() 、 insert()、 find()、 delete()

  1. save() 方法更新一个已存在的文件或者插入一条数据,取决于主键id,否则save直接调用insert
  2. 如果实体没有 id 属性,mongodb会自动生成一个 _id 作为主键
	@Data
	public class ConceptMap{
	    String id;	//主键
	    String geoId;
	    String name;
	    String description;
	}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值