zoukankan      html  css  js  c++  java
  • HTTP ERROR400的问题解决

    今天写添加功能,在点添加提交时报了一个“HTTP ERROR 400”的错误,如图,

    请求提交的代码死活跳转不到后台,郁闷中,开启debug功能,开始一步步排查,

    1、先单独把跳转链接“http://192.168.1.72:8080/securityMonitor_C/device/insert”,放到浏览器中测试,发现可以跳转到后台的insert方法,那么不是跳转方法写错的问题,那是什么原因呢,打开foxfixe浏览器在的开发者工具,如图:

     找到了报错的那条请求,原以为是请求中没有域名的问题,看到请求中域名与参数都是有的,那么会是什么错呢?与同事讨论,说会不会是带的参数有问题,好吧

    这也是一条思路,把这条请求取出来:

    http://192.168.1.72:8080/securityMonitor_C/device/insert?equipmentNo=t001&equipmentType=1&videoUrlLow=d&videoUrlCentre=&videoUrlHigh=&videotapeUrl=&cloudControlUrl=&areaId=&regionId=&status=1&controltId=&namagerUrl=&instalLatitude=d&equipmentModel=&installTime=

    先把完整的放在浏览器中测试,浏览器中,果断报错,好吧,算是找到了一点小进步,那么下一步,开始减少传递的参数一步一步的试吧,首先把最后一个参数(&installTime=)去掉,再把链接拿到浏览器中测试,发现没有报错,可以进入后台(庆祝一下),到这一步,可算是找到问题原因了,是因为installTime这个参数的原因

    可是问题又来了,为什么它会导致链接跳转不到后台呢?

    然后我又回到jsp页面,仔细分析jsp页面代码:

    <!DOCTYPE html>
    <%@ page contentType="text/html;charset=UTF-8" language="java"%>
    <%@ include file="/WEB-INF/views/taglibs.jsp" %>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <style>
    .urlinput{border:1px solid #95b8e7;border-radius:5px;200px;padding:2px;}
    </style>
    </head>
    <body>
    <form id="form1" action="insert">
    <div class="dialogPage">
    <div class="om-panel-header">新增</div>
    <div class="editDiv">
    <table class="editTable">
    <tr>
    <td><span class="required">*</span>设备编码:</td>
    <td><input type="text" id="equipmentNo" name="equipmentNo"></td>
    <td><span class="required">*</span>设备类型:</td>
    <td><input type="combo" id="equipmentType" name="equipmentType" ></td>
    </tr>
    <tr>
    <td><span class="required">*</span>实时低视频播放URL:</td>
    <td colspan="3"><input type="text" id="videoUrlLow" name="videoUrlLow"></td>
    </tr>
    <tr>
    <td>实时中视频播放URL:</td>
    <td colspan="3"><input type="text" id="videoUrlCentre" name="videoUrlCentre"></td>
    </tr>
    <tr>
    <td>实时高视频播放URL:</td>
    <td colspan="3"><input type="text" id="videoUrlHigh" name="videoUrlHigh"></td>
    </tr>
    <tr>
    <td>录像播放URL:</td>
    <td colspan="3"><input type="text" id="videotapeUrl" name="videotapeUrl" ></td>
    </tr>
    <tr>
    <td>云台控制URL:</td>
    <td colspan="3"><input type="text" id="cloudControlUrl" name="cloudControlUrl"></td>
    </tr>
    <tr>
    <td>地区:</td>
    <td><input type="text" id="areaId" name="areaId"></td>
    <td>区域属性:</td>
    <td><input type="combo" id="regionId" name="regionId"></td>
    </tr>
    <tr>
    <td><span class="required">*</span>状态:</td>
    <td><input type="combo" id="status" name="status"></td>
    <td>受控属性:</td>
    <td><input type="combo" id="controltId" name="controltId"></td>
    </tr>
    <tr>
    <td>管理url:</td>
    <td colspan="3"><input type="text" id="namagerUrl" name="namagerUrl"></td>
    </tr>
    <tr>
    <td><span class="required">*</span>安装位置:</td>
    <td><input type="text" id="instalLatitude" name="instalLatitude"></td>
    <td>设备规格型号:</td>
    <td><input type="text" id="equipmentModel" name="equipmentModel"></td>
    </tr>
    <tr>
    <td>安装时间:</td>
    <td><input type="datetime" id="installTime" name="installTime" class="easyui-datetimebox"></td>
    </tr>
    </table>
    <div class="editBtn">
    <button type="submit" class="button">&nbsp;保存&nbsp;</button>
    <button type="button" class="button" onclick="javascript:art.dialog.close();">&nbsp;关闭&nbsp;</button>
    </div>
    </div>
    </div>
    </form>
    </body>
    <script type="text/javascript">
    $(function(){
    //调整样式
    $("#mobile").css("width","435px");
    $("#videoUrlHigh").css("width","435px");
    $("#videoUrlCentre").css("width","435px");
    $("#videoUrlLow").css("width","435px");
    $("#videotapeUrl").css("width","435px");
    $("#cloudControlUrl").css("width","435px");
    $("#namagerUrl").css("width","435px");

    //添加校验
    $('#equipmentNo').validatebox({
    required:true,
    validType:'maxLength[32]'
    });
    $('#equipmentType').validatebox({required:true});
    $('#videoUrlLow').validatebox({required:true,validType:'maxLength[64]'});
    $('#videoUrlCentre').validatebox({validType:'maxLength[64]'});
    $('#videoUrlHigh').validatebox({validType:'maxLength[64]'});

    $("#videotapeUrl").validatebox({validType:'maxLength[64]'});
    $("#cloudControlUrl").validatebox({validType:'maxLength[64]'});
    $("#namagerUrl").validatebox({validType:'maxLength[64]'});
    $('#instalLatitude').validatebox({required:true});

    //初始下拉列表
    $('#equipmentType').combobox({
    data:JSON.parse('${deviceTypeCombo}'),
    panelHeight:'auto',
    editable:false,
    value:1
    });

    $('#regionId').combobox({
    data:JSON.parse('${regionCombo}'),
    panelHeight:'auto',
    editable:false,
    // value:1
    });

    $('#controltId').combobox({
    data:JSON.parse('${controltCombo}'),
    panelHeight:'auto',
    editable:false,
    // value:1
    });

    $('#status').combobox({
    data:JSON.parse('${statusCombo}'),
    panelHeight:'auto',
    editable:false,
    value:1
    });
    $(":submit").click(function(){
    if(!$("#form1").form('validate')){return false;}
    });
    });
    </script>
    </html>

    发现installTime是date类型,但这应该不会是引起跳转不到后台的问题吧,(这里要说明一下,我前端框架使用的是easyUI),于是我想是不是后台接收请求,将请求转换成对应的bean时出现问题了呢,后台的接收方法:

    @RequestMapping(value = "insert")
    public String insert(HttpServletRequest request, Equipment equipment) {
    equipment.setCreateOpId(super.getUserObj(request).getUserId()
    .shortValue());
    equipment.setCreateTime(new Date());
    equipmentService.persist(equipment);
    return "success";
    }

    于是,开始一步步做测试,1、先把方法中将请求映射成 equipment对象给去掉,即不让它自动转化为Equipment对象。重启请求,添加数据,提交,OK断点可以进来。这里已经找到问题出现点了。那么开始分析 为什么加上自动转化为Equipment对象会报错呢

    会不会Equipment对象的installTime成员变量的类型设置的问题引起的呢,于是打开Equipment对象,发现installTime成员变量的类型设置的是Date类型,目前因为这个类型会导致报错,于是将其改为String类型,然后再重启,测试,ok,测试通过。

    错误总结:

    bean对象的参数如果是date类型的,那么date类型从页面上转化为bean对象时就会有问题。最好是将存储时间的变量设置为String,这样就可以避免一些问题。当然我得出的结果的前提是在使用easyUI的框架下,其它的jquery框架有没有这个问题,需要待验证

  • 相关阅读:
    跨域名登录态传递
    ECC公钥格式详解
    企业应用架构演化探讨:从微服务到Service Mesh
    阿里云宕机故障
    一个“三无管理者”的思考
    如何构建安全的微服务应用
    微服务架构实践
    Redis持久化之RDB
    Redis持久化persistence
    Redis 缓存失效和回收机制续
  • 原文地址:https://www.cnblogs.com/w-essay/p/7373242.html
Copyright © 2011-2022 走看看