美文网首页
2019-03-18 原 @RequestBody和@Reque

2019-03-18 原 @RequestBody和@Reque

作者: 向日葵666666 | 来源:发表于2019-03-18 10:29 被阅读0次

    HTTP请求报文解剖

    HTTP请求报文由3部分组成(请求行+请求头+请求体):

    下面是一个实际的请求报文:

    ①是请求方法,GET和POST是最常见的HTTP方法,除此以外还包括DELETE、HEAD、OPTIONS、PUT、TRACE。不过,当前的大多数浏览器只支持GET和POST,Spring 3.0提供了一个HiddenHttpMethodFilter,允许你通过“_method”的表单参数指定这些特殊的HTTP方法(实际上还是通过POST提交表单)。服务端配置了HiddenHttpMethodFilter后,Spring会根据_method参数指定的值模拟出相应的HTTP方法,这样,就可以使用这些HTTP方法对处理方法进行映射了。

    ②为请求对应的URL地址,它和报文头的Host属性组成完整的请求URL,③是协议名称及版本号。

    ④是HTTP的报文头,报文头包含若干个属性,格式为“属性名:属性值”,服务端据此获取客户端的信息。

        报文头包含若干个属性,格式为“属性名:属性值”,服务端据此获取客户端的信息
    

    Accept:text/plain response接受类型
    Cache-Control: no-cache
    Accept-Charset:utf-8
    Authorization:
    Content-Type: request体类型
    host: 域名
    refer: 转发

    ⑤是报文体,它将一个页面表单中的组件值通过param1=value1¶m2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据。不但报文体可以传递请求参数,请求URL也可以通过类似于“/chapter15/user.html? param1=value1¶m2=value2”的方式传递请求参数。

    对照上面的请求报文,我们把它进一步分解,你可以看到一幅更详细的结构图:

    @RequestParam

    用来处理请求头Content-Type: 为 application/x-www-form-urlencoded编码的内容。(Http协议中,如果不指定Content-Type,则默认传递的参数就是application/x-www-form-urlencoded类型),get 方式中queryString的值,和post方式中 body data的值都会被Servlet接受到并转化到Request.getParameter()参数集中,所以@RequestParam可以获取的到。

    RequestParam可以接受简单类型的属性,也可以接受对象类型。
    实质是将Request.getParameter() 中的Key-Value参数Map利用Spring的转化机制ConversionService配置,转化成参数接收对象或字段。

    @RequestBody

    用来处理请求头Content-Type: 为 application/json编码的内容,明确的告诉服务器发送的内容是json。因为需要读取body中内容,所以只能接受post请求。

    前台请求实例如下:

    $.ajax({
    type: "post",
    contentType:"application/json",
    url: "repairs/saveDispatches",
    data: JSON.stringify(dispatchesDTO),
    success: function(data){
    if(!data.success){
    alertError("派工失败");
    }else{
    alertSuccess("派工成功");
    }
    })
    后台代码如下:

    @RequestMapping("/repairs/saveDispatches")
    public void saveDispatches(@RequestBody DispatchesDTO dispatchesDTO,
    HttpServletResponse response) throws IOException {

    dispatchesService.saveDispatches(dispatchesDTO);  
    success(response);  
    

    }
    无需手动进行json与实体的转换,只要能映射上去(也就是字段名和json的key相对应,value可以匹配上数据类型),那么就可以直接转换。


    作者:宣午刚001
    来源:CSDN
    原文:https://blog.csdn.net/xuanwugang/article/details/79661672
    版权声明:本文为博主原创文章,转载请附上博文链接!

    相关文章

      网友评论

          本文标题:2019-03-18 原 @RequestBody和@Reque

          本文链接:https://www.haomeiwen.com/subject/lhtvmqtx.html