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

  • 更新时间:2022-07-27 14:27:14
  • 编辑:菱睿好
为找教程的网友们整理了Spring MVC相关的编程文章,网友袁华琳根据主题投稿了本篇教程内容,涉及到SpringMVC访问Controller、Controller接口返回400、400BadRequest、访问Controller返回400BadRequest相关内容,已被990网友关注,如果对知识点想更进一步了解可以在下方电子资料中获取。
精通Spring MVC4
精通Spring MVC4
  • 大小:11.3 MB
  • 发布人:夏恺乐
  • 下载:Spring

访问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型属性进行赋值时无法正确赋值

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

相关下载

  • Spring MVC学习指南

    大小:83.3 MB
  • Spring MVC学习指南(第2版)

    大小:83.3 MB
  • Spring MVC+MyBatis快速开发与项目实战

    大小:179.1 MB

相关教程

  • springmvc用于方法鉴权的注解拦截器的解决方案代码

    springmvc用于方法鉴权的注解拦截器的解决方案代码

    给网友朋友们带来一篇关于spring mvc的教程,这篇文章主要介绍了springmvc用于方法鉴权的注解拦截器的解决方案代码,具有一定借鉴价值,需要的朋友可以参考下。

    发布时间:2022-07-17

  • 详解Spring MVC/Boot 统一异常处理最佳实践

    给网友朋友们带来一篇关于Spring MVC的教程,在 Web 开发中, 我们经常会需要处理各种异常,这篇文章主要介绍了详解Spring MVC/Boot 统一异常处理最佳实践,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    发布时间:2022-07-01

  • springmvc 传递和接收数组参数的实例

    给大家整理一篇关于spring mvc的教程,下面小编就为大家分享一篇springmvc 传递和接收数组参数的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    发布时间:2022-06-28

  • SpringMvc @RequestParam 使用推荐使用包装类型代替包装类型

    SpringMvc @RequestParam 使用推荐使用包装类型代替包装类型

    给大家整理了关于Spring Mvc的教程,这篇文章主要介绍了SpringMvc @RequestParam 使用推荐使用包装类型代替包装类型,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    发布时间:2022-06-20

  • SpringMVC和rabbitmq集成的使用案例

    SpringMVC和rabbitmq集成的使用案例

    为网友们分享了关于Spring MVC的教程,这篇文章主要介绍了SpringMVC和rabbitmq集成的使用案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    发布时间:2022-06-27SpringMVC rabbitmq集成

  • Spring MVC学习教程之RequestMappingHandlerMapping匹配

    给大家整理了关于Spring MVC的教程,这篇文章主要给大家介绍了关于Spring MVC学习教程之RequestMappingHandlerMapping匹配的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧

    发布时间:2022-06-12

  • SpringMVC上传图片代码实例

    给网友朋友们带来一篇关于Spring MVC的教程,这篇文章主要介绍了SpringMVC上传图片代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    发布时间:2022-06-24

  • Spring Mvc中传递参数方法之url/requestMapping详解

    给大家整理了关于Spring Mvc的教程,在开发中,参数传递是必不可少的一个功能,下面这篇文章主要给大家介绍了关于Spring Mvc中传递参数方法之url/requestMapping的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考

    发布时间:2022-07-14

  • springmvc实现文件上传功能

    springmvc实现文件上传功能

    给网友朋友们带来一篇关于spring mvc的教程,这篇文章主要为大家详细介绍了springmvc实现文件上传功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    发布时间:2022-06-12springmvc文件上传

用户留言