Get获取资源,Get能穿啥,url参数,不能传递jsonPost能传递json,但是response只能解析一个完整的json对象。
你会发现post用比较复杂的表单不可能用formdata,最后发现json简单。到最后获取数据query,你就会在get该用json还是formdata中纠结。
一个是违反RFC一个是restful,一个良好的规约,最后大概率你选择了自己拼参数。还是等于选择了formdata。
// form data 简单:
name=john&phone=12345
// form data 冗余:
passengers[][name]=Egor&passengers[][role]=pilot&passengers[][name]=DHH&passengers[][role]=2pilot
// JSON 冗余:{“name”:”john”,”phone”:”12345”} // JSON 简单:{“passengers”:[{“name”:”Egor”, “role”:”pilot”},{“name”:”DHH”, “role”:”2pilot”}]}
通过上面例子发现,结构简单的时候formdata数据更简单,结构复杂的时候(array)JSON数据更简单。但其实这些差异不是重点。
题目问到Java接口,应该分三种情况。
如果是JSP等服务器端模板技术,再加上一些jQuery AJAX。
POST的时候,默认contentType都是application/x-www-form-urlencoded。可改成application/json,看自己。
如果用前端框架,Angular、React、Vue。
POST的时候,默认contentType都是application/json。建议用JSON,别改。JSON就是JS的一个子集,既方便JS解析,也方便人读。
Java服务器端对其他服务器端通信。
其实更建议用XML,特别是和第三方服务通信的时候。如果公司内部自己的几个Java服务通信,用JSON就好。
现在Java Web开发,最常见的是上面第2种情况。所以,当用Spring MVC的时候,建议用RestController
如果用Controller,需要这么写:
@Controller
@RequestMapping("/persons")
class PersonController {
@GetMapping(path = "/{id}", produces = "application/json;charset=UTF-8")
@ResponseBody
public Person getPerson(@PathVariable Long id) {
// ...
}
@PostMapping(consumes = "application/json;charset=UTF-8")
@ResponseBody
@ResponseStatus(HttpStatus.CREATED)
public void add(@RequestBody Person person) {
// ...
}
}
如果用RestController,不需要写ResponseBody,也不需要指定consumes和produces类型,默认都是application/json。可以简化成这样:
本文系作者在时代Java发表,未经许可,不得转载。
如有侵权,请联系nowjava@qq.com删除。