get 和 post 请求方式 及其参数解析

一、Get与Post区别
  Get和Post都是Http协议的组件,所以底层都是使用tcp链接。Get的请求方式是将http的header和data一并发往服务端,也就是一条tcp数据包发送,这就会有两个问题:

数据量有限,依赖于Tcp负载能力,所以携带的数据量很大的情况下,容易造成重发。
所有的携带的数据只能接受转化成ASCII字符。
  但是Post不一样,post使用两步走,先发送http的header,然后再传输data。数据类型也不受限制。而且数据隐秘性比较好。

1.get请求方式参数是拼接在url后,所以限制了可以发送的长度。Get不支持使用http Body获取参数,他只支持params,也就是URL拼接参数。
2. post可以传递参数可以大致分成两种,一种是表单:在sevlet实现中mutipart/form-data和application/x-www-form-urlencoded会被特殊处理,请求参数将被放置于request.paramter,解析成map。第二种,已application/json,参数是存放在json中的,参数必须要用@RequestBody才能解析出来。

@RequestBody是将post请求中内容转为一个整体对象。 @RequestBody的解析有两个条件:
1.POST请求中content的值必须为json格式(存储形式可以是字符串,也可以是byte数组);
2.@RequestBody注解的参数类型必须是完全可以接收参数值的类型,比如:Map,JSONObject,或者对应的JavaBean;
所以Integer类型不能作为@RequestBody注解的参数类型,这种方式只用在Content-Type=application/x-www-form-urlencoded这种情况下才能使用,sevlet将Body中的key-value转成Param。 可以使用 @RequestParam 接收

3、通用HttpServletRequest
  和Get方式一样,这是个通用的方式。这个也可以和URL拼接的一起搭,但是没有RequestParam的String类型值被拼接问题,优先级 form-data高于URL拼接高于x-www-form-urlencoded。

get获取请求参数:

(1) 直接获取request 如: public String getHtml(HttpServletRequest request) {}

(2) 什么也不加,直接在方法中获取参数值 如: public String getHtml(String url, String token) {}

(3) 利用@RequestParam 如: public User getUserInfo(@RequestParam(value = “url”,required = false) String url){}

post获取请求参数:

(1): 直接获取request 如: public String getHtml(HttpServletRequest request) {}

(2): 使用@RequestBody 可接受的参数 String, Map,JSONObject,或者对应的JavaBean

原文链接:https://blog.csdn.net/qfikh/article/details/88553603

你可能感兴趣的:(json,http,java)