我的编程空间,编程开发者的网络收藏夹
学习永远不晚

使用SpringMVC访问Controller接口返回400BadRequest

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

使用SpringMVC访问Controller接口返回400BadRequest

访问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">&nbsp;至&nbsp;</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型属性进行赋值时无法正确赋值

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

使用SpringMVC访问Controller接口返回400BadRequest

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

在springmvc中使用controller如何实现返回值

这篇文章将为大家详细讲解有关在springmvc中使用controller如何实现返回值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。使用@RequestBody 比如代码如下:@Reque
2023-05-31

在SpringMVC中使用 Controller 如何实现返回可选类型的值

本篇文章为大家展示了在SpringMVC中使用 Controller 如何实现返回可选类型的值,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。spring mvc 支持如下的返回方式:ModelAnd
2023-05-31

SpringMVC编程使用Controller接口实现控制器实例代码

Controller简介Controller控制器,是MVC中的部分C,为什么是部分呢?因为此处的控制器主要负责功能处理部分:1、收集、验证请求参数并绑定到命令对象;2、将命令对象交给业务对象,由业务对象处理并返回模型数据;3、返回Mode
2023-05-30

springMVC利用FastJson接口返回json数据相关配置详解

一直使用的是FastJson,感觉还不错,很方便。看了一段别人的分析,觉得很有道理。为什么要使用Fastjson,其实原因不需要太多,喜欢就行。 我之所以要替换掉Jackson最主要的原因是Jackson在处理对象之前的循环嵌套关系时不便。
2023-05-31

android端使用volley访问网络接口的使用

android端使用volley访问网络接口的使用 -------------------------------------准备工作------------------------------------- 1、我们要使用到一个名叫vol
2022-06-06

Go使用协程批量获取数据加快接口返回速度

这篇文章主要介绍了Go使用协程批量获取数据加快接口返回速度,使用Go语言后,可以并发获取,极大提升效率,需要的朋友可以参考下
2023-02-07

SpringBoot如何使用AOP实现统计全局接口访问次数

本篇内容主要讲解“SpringBoot如何使用AOP实现统计全局接口访问次数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot如何使用AOP实现统计全局接口访问次数”吧!AOP是
2023-07-02

如何使用Linux服务器加强Web接口的访问控制

要加强Web接口的访问控制,可以使用以下方法:1. 使用防火墙:配置服务器的防火墙规则,只允许特定的IP地址或IP地址范围访问Web接口。可以使用iptables命令或其他防火墙管理工具进行配置。2. 使用访问控制列表(ACL):使用ACL
2023-10-12

Android Studio finish()方法的使用与解决app点击“返回”,即直接退出的问题

在这里,我们将用到finish(),简单介绍一下它的使用: finish()官方解析:Call this when your activity is done and should be closed. The ActivityResult
2022-06-06

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录