一、类型
Content-Type:Content-Type是指http/https发送信息至服务器时的内容编码类型,contentType用于表明发送数据流的类型,服务器根据编码类型使用特定的解析方式,获取数据流中的数据
enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。默认表单数据会编码为 “application/x-www-form-urlencoded”。也就是在发送到服务器之前,所有字符都会进行编码(空格转换为 “+” 加号,特殊符号转换为 ASCII HEX 值等)。
1.表单提交常用有两种:application/x-www-form-urlencoded(默认):优先post请求
multipart/form-data :post请求
2. 另外一种是application/json 只能post请求
3. 设置的时候再请求头
1.application/x-www-form-urlencoded
application/x-www-form-urlencoded 浏览器的原生form表单
application/x-www-form-urlencoded: 窗体数据被编码为名称/值对。这是标准的编码格式,比如 key=xxx&name=111&password=123456;
当action为get时候,浏览器用x-www-form-urlencoded的编码方式把form数据转换成一个字串(name1=value1&name2=value2…),然后把这个字串append到url后面,用?分割,加载这个新的url。
接收部分代码:
//application/x-www-form-urlencoded 原生form默认的提交方式
@PostMapping("/form")
public void form(@RequestParam("id") int id,@RequestParam("name") String name){
System.out.println(id+name);
}
2.multipart/form-data
multipart/form-data: 窗体数据被编码为一条消息,页上的每个控件对应消息中的一个部分,这个一般文件上传时用
当action为post时候,浏览器把form数据封装到http body中,然后发送到server。 如果没有type=file的控件,用默认的application/x-www-form-urlencoded就可以了。 但是如果有type=file的话,就要用到multipart/form-data了。浏览器会把整个表单以控件为单位分割,并为每个部分加上Content-Disposition(form-data或者file),Content-Type(默认为text/plain),name(控件name)等信息,并加上分割符(boundary)。
Content-Type: multipart/form-data; boundary=xxxx
前半部分代表数据类型,而boundary代表分隔符,boundary对应的xxxx是由请求方自定义设置的。
接收代码部分:
/**
*
consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
* @param file
* @return
*/
@PostMapping(value = "/uploadFile", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public String handleFileUpload(
@RequestParam("id") int id,
@RequestParam("name") String name,
@RequestPart(value = "file") MultipartFile file){
//@RequestParam(value = "file") MultipartFile file)
return name+id+file.getOriginalFilename();
}
注解:
@RequestParam(value=”参数名”,required=”true/false”,defaultValue=””)
1.required:是否包含该参数,默认为true,表示该请求路径中必须包含该参数,如果不包含就报错
2.defaultValue:默认参数值,如果设置了该值,required=true将失效,自动为false,如果没有传该参数,就使用默认值
3.application/json
application/json:必须用接受@RequestBody,因为GET请求没有body,所以无法接受,只能使用post
@PostMapping
public Result add(@RequestBody Sku sku){
//调用SkuService实现添加Sku
skuService.add(sku);
return new Result(true,StatusCode.OK,"添加成功");
}