前端传参了但是到了后端为null_解决前端Restful风格(Put)传递参数,后端为Null...

出现问题的原因

这个问题其实是Tomcat的问题.

实际上,Tomcat把请求的数据(实体信息中的数据)封装成一个Map(键值对形式),request.getParameter(“”)就从map中取值,而SpringMVC会把每个属性的值调用getParameter方法封装,而Tomcat看到是PUT请求则不会封装请求数据到map,只有POST形式的请求才会封装到请求体。

为什么会出现这种情况呢?

实际上这是因为在设计Tomcat的时候就出现的问题.在Tomcat的源代码的Request.java类中,大约是3111行左右的代码,有这样的一段代码.

49e18046e2b4

image.png

有如下代码:

49e18046e2b4

image.png

这一段代码的作用是获取连接器,再判断请求的方法是否在规定的方法之中,如果存在,则继续,如果不存在,则直接返回,不进行数据的封装.与我们设置的方法比对的就是代码中的方法,这个方法是POST,所以我们的PUT方法和POST肯定是不一样的,最后只能是返回.于是就出现了上面的情况.

1、只能解决PUT

方案一

配置web.xml文件

HiddenHttpMethodFilter

org.springframework.web.filter.HiddenHttpMethodFilter

HiddenHttpMethodFilter

/*

在发送Ajax请求的时候,使用如下的格式:

$.ajax({

url: "${pageContext.request.contextPath}/emp/" + id,

type: "POST",

data: $("#app form").serialize() +"&_method=PUT",

success: function (result) {

alert("操作成功!");

}

});

可以看到不同的地方,首先配置HiddenHttpMethodFilter,这个类可以把POST转换成对应的_method=?的?号中的内容,从而实现请求.当然每次写Ajax请求的时候,都需要协商method字段,便于解析.

方案二

方案二就比较简单了.只需要一个简单的web.xml的配置.

HttpPutFormContentFilter

org.springframework.web.filter.HttpPutFormContentFilter

HttpPutFormContentFilter

/*

$.ajax({

url: "${pageContext.request.contextPath}/emp/" + id,

type: "PUT",

data: $("#app form").serialize(),

success: function (result) {

alert("操作成功!");

}

});

2、 支持PUT,DELETE请求

在web.xml中配置

HiddenHttpMethodFilter

org.springframework.web.filter.HiddenHttpMethodFilter

HiddenHttpMethodFilter

/*

原理是:在Aajx中发送post请求后,带_method参数,将其修改为PUT,或者DELETE请求

例子:JS代码中该为

$.ajax({

url:"${APP_PATH}/RecordController/record",

type:"POST",

data:{id :id ,

_method:"PUT"},

success:function(result){

alert("update success");

}

});

或者在url中加&_method=”PUT”或者&_method=”DELETE”即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
后端分离项目的后端技术规范主要取决于具体的项目需求和技术栈选择。在前后端分离的项目中,后端负责提供数据和业务逻辑,前端负责数据展示和用户交互。以下是一些建议的后端技术规范: 1. RESTful API:采用RESTful风格的API设计,使用HTTP协议的GET、POST、PUT、DELETE等请求方法来进行资源的增删改查操作,保证接口的一致性和可扩展性。 2. 数据库:选择合适的数据库技术,如MySQL、MongoDB、PostgreSQL等,根据项目的需求设计数据库表结构,并进行有效的索引设计和性能优化。 3. Web框架:选择适合后端开发的Web框架,如Spring Boot、Django、Express等,根据项目需求进行路由配置、中间件使用等。 4. 接口文档:编写清晰、详细的接口文档,包括接口的URL、参数、返回值、错误码等信息,方便前端开发人员理解和调用。 5. 安全性:对于涉及用户隐私的接口,需要进行安全性验证,如用户认证、权限控制等,防止未授权的用户访问敏感数据。 6. 性能优化:针对后端接口的性能进行优化,如合理使用缓存、数据库查询优化、异步处理等,提高系统的响应速度和并发能力。 7. 日志和监控:记录系统的运行日志,包括错误日志、访问日志等,通过监控工具对系统进行实时监控和性能分析,及时发现和解决问题。 8. 单元测试:编写单元测试用例,对后端接口进行测试,保证接口的正确性和可靠性。 请注意,以上只是一些常见的后端技术规范,具体的规范还需要根据项目需求和团队实际情况进行调整和补充。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [前后端分离及后端分层](https://blog.csdn.net/weixin_38004638/article/details/98851043)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值