使用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
猜你喜欢
- 有时候编译器、处理器的优化会导致runtime与我们设想的不一样,为此Java对编译器和处理器做了一些限制,JAVA内存模型(JMM)将这些
- 每次写批量的时候,都要在网上搜索一下,虽然都做过多次了,但具体的自己还是记不住(汗颜),所以索性今天就记录下来。前期说明:foreach的主
- 前言之前一篇文章介绍了基本的统一异常处理思路: Spring MVC/Boot 统一异常处理最佳实践.上篇文章也有许多人提出了一些问题:如何
- 逆时针画圆弧,原理:将360度分割成36份,分别标出每10度角度时的坐标点,然后将每个点连接起来。 #include <io
- 绝对路径:不可改变的路径本地绝对路径:增加盘符的路径(e:/test/test.html)网络绝对路径:增加协议,IP地址,端口号的路径(h
- 什么是https要说https我们得先说SSL(Secure Sockets Layer,安全套接层),这是一种为网络通信提供安全及数据完整
- 本文实例为大家分享了Java实现猜数字游戏的具体代码,供大家参考,具体内容如下完成猜数字游戏需要实现以下几点:获得一个随机数作为“答案数”;
- 一,使用注解: 在spring的配置文件applicationContext.xml中,加入注解扫描。配
- 1、修改maven的pom文件只需要将如下依赖添加到pom.xml文件中即可。(注意此处是以plugin的方式,放在<plugins&
- 如今,企业级应用程序的常见场景是同时支持HTTP和HTTPS两种协议,这篇文章考虑如何让Spring Boot应用程序同时支持HTTP和HT
- spring data jpa @query返回map踩坑记录最近用spring data jpa,网上看的一些教程,有的说是返回的Obje
- 一、前言正常情况下classloader只能找到jar里面当前目录或者文件类里面的*.class文件。为了能够加载嵌套jar里面的资源之前都
- 问题描述在应用MyBatis时,使用对象关系映射,将对象和Aliase映射起来。在Mybatis的文档明确写出,如果你没有明确定义实体类的A
- 路由做Android/iOS原生开发的时候,要打开一个新的页面,你得知道你的目标页面对象,然后初始化一个Intent或者ViewContro
- Mybatis与JPA的优缺点JPA java持久层API可理解为一种规范,Hibernate就是其具体一个实现。它的实现应用是Spring
- 1,添加依赖在project的build.gradle文件中添加dependencies { classpath 'co
- 目前常用的ORM框架有 Mybatis(batis)、MybatisPlus,Hibernate、Jpa等几个框架,今天就简单介绍一下搭建M
- JDK * :利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。CGlib * :利用AS
- 一、什么是过滤器过滤器是对数据进行过滤,预处理过程,当我们访问网站时,有时候会发布一些敏感信息,发完以后有的会用*替代,还有就是登陆权限控制
- 前言LocalDateTime、LocalDate、LocalTime 是 Java8 全新的日期框架,加强了对时间的管理,有很多特别好用的