如何使用PUT请求获取表单数据

目录

背景内容为记录问题出现原因,太长不看系列。。想看操作直接点击具体操作。。。

背景

具体操作

背景

springMVC有个  @RestController 注解,配合以下注解可以对开发中的不同操作做处理

@GetMapping //获取资源
@PostMapping //新建
@PutMapping //修改
@DeleteMapping //删除
@PatchMapping //补丁(即修改部分)

假设想要做一个RestFul风格、且 使用FreeMaker模板技术的话,就有些不太使用了。因为使用FreeMaker的话,控制器返回的应该是一个html(返回字符串对象,该字符串对象会去匹配对应的模板,然后整合后返回一个html),因此不能使用@RestController ,因为该注解相当于 @Controller + @ResponseBody,返回的是一个JSON对象,因此只能用@Controller,然后需求返回 html 或者 json

在实际开发中,由于form表单本身就是支持get和post方法的,在使用get方法获取资源的时候跟之前一样。但用于项目中新建跟修改往往是使用同一个模板的,需要对这两个操作做不同处理。

一开始思路:同样使用表单提交,通过js点击事件来发送ajax请求,在发送请求过程中通过判断id是否存在来控制请求方式,如下:

$(function () {
    //提交表单
    $('#btn_submit').click(function () { 
            var $id= $('input[name=id]').val();
			//新增操作
            if($id == ""){
                var $type = 'POST';
            }else {
			//修改操作
                var $type = 'put';
            }
            $("#editForm").ajaxSubmit({
                type:$type,
                success:function (data) {
                    //请求成功后的回调函数
                }
            });
        
    });
})

结果发送post请求的时候是正常的,可以完成添加操作,但是切换成put请求就会出错了,控制器无法获取到表单数据。那也就无法进行修改了。在经过一晚上搜索后,总结步骤如下:

具体操作

首先在 web.xml 配置以下,记得放在  characterEncodingFilter 前面,也有说要放在 dispatcher 至于为什么,应该是跟请求经过这些组件的前后顺序有关,有兴趣自己去搜索 httpPutFormContentFilter 了解更多。

<!-- 过滤器 转化提交方式 -->
    <filter>
        <filter-name>httpPutFormContentFilter</filter-name>
        <filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>httpPutFormContentFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

准备一个html,在form表单中把  method 设置为  post ,并加入

<input type="hidden" name="_method" value="put"/>

<form class="form-horizontal" action="/students" id="editForm" method="POST">

        <input type="hidden" name="_method" value="put"/>
        <input type="hidden" value="${(stu.id)!}" name="id">
        <input value="${(stu.name)!}" name="name">
        <input value="${(stu.age)!}" name="age">
   
</form>

由于我采用的是RestFul风格架构,因此若是新增操作,应该使用post方式请求,修改的话用put,请求方式为异步,js如下

$(function () {
    //提交表单
    $('#btn_submit').click(function () { 
            var $id= $('input[name=id]').val();
			//新增操作
            if($id == ""){
                var $type = 'POST';
            }else {
			//修改操作
                var $type = 'put';
            }
            $("#editForm").ajaxSubmit({
                type:$type,
                success:function (data) {
                    //请求成功后的回调函数
                }
            });
        
    });
})

控制接受请求时,使用以下区分是put请求还是post请求或者组合注解

@RequestMapping(method = RequestMethod.PUT)
//或者
@PutMapping
@RequestMapping(method = RequestMethod.POST)
//或者
@PostMapping

这样就能获取到表单数据啦~

发布了9 篇原创文章 · 获赞 0 · 访问量 891
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览