后台接收格式,除了使用对象之外的内容,我还可以通过获取键值对的方式接收前台的数据。
后台接收键值对形式的数据。
- form的enctype属性为编码方式,常用有两种:application/x-www-form-urlencoded和multipart/form- data,默认为application/x-www-form-urlencoded。还可以是 JSON,在JavaScript 请求中使用较多,form表单数据也可以直接json序列化 。
var queryArray = $(formElement).serializeArray()
先说一个报错 Unrecognized token ‘list’: was expecting (‘true’, ‘false’ or ‘null’)
这个错误是说 调入 list 参数的格式不正确。
JSON 格式
1)、键名称:用双引号括起。
2)、字符串:用双引号括起。
3)、数字,布尔类型 不需要括号括起
个人认为,所有向后台传输的数据,都是以键值对的形式传递的,即使是form 表单也是在没有文件上传的情况下,通过 application/x-www-form-urlencoded 编码方式将编码文本类型的数据,会把数据序列化成一个个 String 类型的键值对的形式传递给后台。
- 我要传向后台一个 JSON 串。
- 以下的两种的 JSON 格式 ,一种是 JSON 的集合,一种是 JSON 嵌套 JSON。
- 前台传递一个 List 集合的数组。
上图是测试的 url ,请求的字符串以及后台的接收和控制台的响应。
- 前台传递的内容
- 前台传递一个 JSON 串。
扩展接收数据的注解
- @RequestBody 用来处理 Content-Type不是application/x-www-form-urlencoded编码的内容,例如 application/json, application/xml 等
- @Pathvariable,
url/{param},这时的param可通过 @Pathvariable注解绑定它传过来的值到方法的参数上。
@Controller
@RequestMapping("/con/{param1}")
public class ConTestController {
@RequestMapping("/test/{param2}")
public void test(@PathVariable String param1, @PathVariable String param2) {
}
}
- @RequestHeader 注解,可以把Request请求header部分的值绑定到方法的参数上。更多内容参考。
@RequestMapping("/header.action")
public void test(@RequestHeader("Accept-Encoding") String encoding) {
}
- @RequestParam 用来绑定参数中的值,便于在方法中的参数里使用。
- @SessionAttributes,用来绑定HttpSession中的attribute对象的值,便于在方法中的参数里使用。
- @CookieValue 用于绑定 Cookie 上边的某个键值。
- @ModelAttribute 方法上使用,在处理@RequestMapping之前,为请求绑定需要从后台查询的model。参数上使用,会通过名称对应,把相应名称的值绑定到注解的参数bean上