使用SpringMVC访问Controller接口返回400BadRequest
作者:思想永无止境 发布时间:2023-06-05 00:14:01
访问Controller返回400BadRequest
问题
SpringMVC使用自定义类型接收参数时, form提交会返回400 Bad Request,controller接口里的方法没有得到调用。
@RequestMapping(value = "/list.do", method = {RequestMethod.GET , RequestMethod.POST})
public String list(Order param, HttpServletRequest request) {
logger.info(JSONObject.fromObject(param).toString());
Integer count = orderService.findCount(param);
logger.info(count);
param.setRows(count);
List<Order> result = orderService.findByPage(param);
logger.info(JSONArray.fromObject(result).toString());
request.setAttribute("param", param);
request.setAttribute("result", result);
return "order/list";
}
<form action="<%=basePath%>order/list.do" id="myform" method="post" >
<input type="hidden" name="currentPage" value="${param.currentPage}"/>
<table>
<tr>
<td width="80" align="right">订单状态: </td>
<td>
<select name="order_status" autoWidth="true" style="width:120px;">
<option value="">全部</option>
<c:forEach items="${order_status_map}" var="temp">
<option value="${temp.key}" <c:if test="${temp.key == param.order_status}">selected="selected"</c:if>>${temp.value}</option>
</c:forEach>
</select>
</td>
<td align="right">订单号: </td>
<td>
<input type="text" name="order_no" id="order_no" onfocus="this.value=''" value="${param.order_no}" style="width:140px;"/>
</td>
</tr>
<tr>
<td width="80" align="right">创建时间: </td>
<td><input type="text" class="date" name="createTimeStart" value="${param.createTimeStart}" style="width:120px;"/></td>
<td align="center"> 至 </td>
<td><input type="text" class="date" name="createTimeEnd" value="${param.createTimeEnd}" style="width:120px;"/></td>
<td><button><span class="icon_find">查询</span></button></td>
<td><button onclick="add();return false;"><span class="icon_add">添加</span></button></td>
</tr>
</table>
</form>
直接在浏览器地址栏输入<%=basePath%>order/list.do是可以访问的并查询出数据的,我一开始以为是get方法能访问,post不能访问,后来发现,get使用Context-Type为application/x-www-form-urlencoded时也会访问不了,post使用使用application/json也能访问。
所以,这就需要修改form里的enctype属性为application/json,但是enctype属性只支持下面表格三种,
HTML form 标签的 enctype 属性
值 | 描述 |
---|---|
application/x-www-form-urlencoded | 在发送前编码所有字符(默认) |
multipart/form-data | 不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。 |
text/plain | 空格转换为 “+” 加号,但不对特殊字符编码。 |
我试了下,text/plain和application/json具有同样的效果。
虽然在form里加上enctype=”text/plain”可以解决接口返回400BadRequest的问题,但是有新的问题出现:接口的参数Order param接受不到post提交的值,但是将参数直接拼接在url,Order param则可以接收到值,Order param
SpringMVC遇到的Http400BadRequest总结
在搭建SpringMVC环境,在使用中遇到了多次Bad Request的连接
下面来总结下
1.参数类型不对,如后台实体类的属性为int,但传来的参数为字符串
2.因为我的粗心,本来是要通过Ajax获得一个json串,但是后台的方法在返回值类型前没有加@RequestBody注解
3.传递的参数为日期,spring不知道该以什么格式转换为Date类型,解决办法为在实体类的日期属性上加上@DateTimeFormat(pattern="yyyy-MM-dd")注解即可
4.刚遇到的问题,排查了好久终于知道是什么原因了,实体类中有int类型的属性,但是前台传参时传递的样子是这样的"age=",并没有给一个准确的数字(age=18),所以导致Spring在对int型属性进行赋值时无法正确赋值
来源:https://blog.csdn.net/u012643122/article/details/76269744
猜你喜欢
- 1、线性表定义线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特
- Hibernate中有HQL查询语法。但我们用得比较熟的还是数SQL语句,那么应该怎么来让Hibernate支持SQL呢?这个不用我们去考虑
- 本文实例讲述了C#控件闪烁的解决方法。分享给大家供大家参考。具体分析如下:如果你在Form中绘图的话,不论是不是采用的双缓存,都会看到图片在
- 1. 单个属性yaml 内的属性如下:server: port: 80只需在成员变量上注解 @Value(“
- 本文实例为大家分享了struts2和hibernate实现登录和注册功能,供大家参考,具体内容如下1、该项目使用MySQL数据库,数据库名为
- 在平时的工作中,估计大多数都做过轮询调度的任务,比如定时轮询数据库同步,定时邮件通知等等。大家通过windows计划任务,windows服务
- 目录前言生活中的Future模式场景1:场景2Future模式中的主要角色实现一个简单的Future模式Java中的Future模式Futu
- 前言在使用Java开发接口请求中,我们需要对请求进行进行统一返回值,这时候我们自己封装一个统一的Result返回类,下面就介绍下我用的这种的
- 前言大家好,我是小郭,前面我们学习了利用Semaphore来防止多线程同时操作一个资源,通常我们都会利用并行来优化性能,但是对于串行化的业务
- 前几天用phonegap编译GameBuilder+CanTK时,发现HTML里的viewport无效。CanTK根据devicePixel
- 前两年写的东西,现在整理一下发出来!以前公司需要做WebService,并且对WebService的SoapHeader进行加密,所以就写了
- 本文实例为大家分享了Unity3D Shader实现扫描显示的具体代码,供大家参考,具体内容如下通过Shader实现,从左向右的扫描显示,可
- 一、解码流程解码流程大致分为以下三个部分,以FFmpge源码下的ffmpeg\doc\examples\decode_audio.c为参考。
- 最近chatGPT也是非常的火爆,相信大家都看到了,现在提供一种Java调用chatGPT的方法,我们主要通过两个工具来实现,一就是http
- 一、什么是Spring Cloud?SpringCloud 对常见的分布式系统模式提供了简单易用的编程模型,帮助开发者构建弹性、可靠、协调的
- 方法一class Program { [STAThread] static
- 一、修改ReadOnly属性1、设置整个DataGridView只读:DataGridView.ReadOnly=true;此时用户的新增行
- log4j的rootLogger及其他坑爹地方这里用的是org.apache.log4j.Loggerlog4j.rootLogger=er
- Date类概述java.util.Date类 表示特定的瞬间,精确到毫秒。 继续查阅Date类的描述,发现Date拥有多个构造函数,只是部分
- Java类成员变量的默认值基本数据类型作为类的成员变量时可以不赋予初值,在方法中输出也不会报错。下面我们看看我们的八种数据类型的默认值是什么