Java 接口传参 form data 和 json 的区别。

Get获取资源,Get能穿啥,url参数,不能传递jsonPost能传递json,但是response只能解析一个完整的json对象。

你会发现post用比较复杂的表单不可能用formdata,最后发现json简单。到最后获取数据query,你就会在get该用json还是formdata中纠结。

一个是违反RFC一个是restful,一个良好的规约,最后大概率你选择了自己拼参数。还是等于选择了formdata。

application/x-www-form-urlencoded:

// form data 简单:
name=john&phone=12345
// form data 冗余:
passengers[][name]=Egor&passengers[][role]=pilot&passengers[][name]=DHH&passengers[][role]=2pilot

application/json:

// 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删除。

编辑于

关注时代Java

关注时代Java