今天写添加功能,在点添加提交时报了一个“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;width: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框架有没有这个问题,需要待验证

HTTP ERROR400的问题解决的更多相关文章

  1. mysql 7下载安装及问题解决

    mysql 7安装及问题解决 一.mysql下载 下载地址:https://www.mysql.com/downloads/ Community (GPL) Downloads MySQL Commu ...

  2. Microsoft Visual Studio 2015 下载、注册、安装过程、功能列表、问题解决

    PS:请看看回复.可能会有文章里没有提到的问题.也许会对你有帮助哦~ 先上一张最终的截图吧: VS2015正式版出了,虽然没有Ultimate旗舰版,不过也是好激动的说.哈哈.可能有的小伙伴,由于工作 ...

  3. Spark Shuffle原理、Shuffle操作问题解决和参数调优

    摘要: 1 shuffle原理 1.1 mapreduce的shuffle原理 1.1.1 map task端操作 1.1.2 reduce task端操作 1.2 spark现在的SortShuff ...

  4. python scikit-learn 环境搭建问题解决记录

    之前一直用pycharm 里内置的pip进行python 包的安装,今天装scikit-learn时没报错,但是报scipy包不识别,pip下载也报错下载anaconda 集成插件,最终问题解决:参考 ...

  5. springmvc环境搭建以及常见问题解决

    1.新建maven工程 a)  打开eclipse,file->new->project->Maven->Maven Project b)  下一步 c)   选择创建的工程为 ...

  6. 【转】zigbee终端无法重连的问题解决

    zigbee终端无法重连的问题解决 1.zigbee重连的原因 (1)zigbee由于各种原因的干扰导致信号太差而掉线. (2)协调器重启. 2.zigbee终端重连的处理 (1)zigbee掉线后会 ...

  7. mysql数据库乱码的问题解决

    排查原因:打断点,查看到底是在执行存数据库操作之前就已经乱码了,还是存数据库操作后乱码的. 1.前者解决方案: 在web.xml里面加上: <filter> <filter-name ...

  8. ubuntu安装navicat及常见问题解决

    1.安装navicat Step1: 下载Navicat ,网址:http://www.navicat.com/en/download/download.html Step2:进入下载目录,解压压缩包 ...

  9. 完整部署CentOS7.2+OpenStack+kvm 云平台环境(5)--问题解决

    一.[root@openstack-server ~]# nova listERROR (CommandError): You must provide a username or user id v ...

随机推荐

  1. Cypress系列(101)- intercept() 命令详解

    如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 作用 使用该命令在网络层管理 HTTP ...

  2. 第15.18节 PyQt(Python+Qt)入门学习:Model/View架构中视图Item Views父类详解

    老猿Python博文目录 老猿Python博客地址 一.概述 在PyQt图形界面中,支持采用Model/View架构实现数据和界面逻辑分离,其中Model用于处理数据存储,View用于界面数据展现,当 ...

  3. Mybatis04

    title: Mybatis学习04 date: 2020-01-20 21:48:00 tags: 这次的笔记主要是mybatis中的注解 1.实体类的注解 实体类的注解在mybati的XML文件中 ...

  4. php 序列化键、值逃逸

    转自https://www.cnblogs.com/wangtanzhi/p/12261610.html PHP反序列化的对象逃逸(很重要一点,引号的匹配是从左到右按字符串长度进行匹配) 任何具有一定 ...

  5. 团队作业4-Day6

    团队作业4-Day6 项目git地址 1. 站立式会议 2. 项目燃尽图 3. 适当的项目截图 4. 代码/文档签入记录(部分) 5. 每人每日总结 吴梓华:今日修复了图片显示BUG,补充了排位模式出 ...

  6. 一种不错的 BFF Microservice GraphQL/REST API 层的开发方式

    云原生(Cloud Native)Node JS Express Reactive 微服务模板 (REST/GraphQL) 这个项目提供了完整的基于 Node JS / Typescript 的微服 ...

  7. 二、java多线程编程核心技术之(笔记)——如何停止线程?

    1.异常法 public class MyThread extends Thread { @Override public void run() { super.run(); try { for (i ...

  8. JS复习之深浅拷贝

    一.复习导论(数据类型相关) 想掌握JS的深浅拷贝,首先来回顾一下JS的数据类型,JS中数据类型分为基本数据类型和引用数据类型. 基本数据类型是指存放在栈中的简单数据段,数据大小确定,内存空间大小可以 ...

  9. css 13-CSS3属性:Flex布局图文详解

    13-CSS3属性:Flex布局图文详解 #前言 CSS3中的 flex 属性,在布局方面做了非常大的改进,使得我们对多个元素之间的布局排列变得十分灵活,适应性非常强.其强大的伸缩性和自适应性,在网页 ...

  10. css 01-CSS属性:字体属性和文本属性

    01-CSS属性:字体属性和文本属性 #本文重要内容 CSS的单位 字体属性 文本属性 定位属性:position.float.overflow等 #CSS的单位 html中的单位只有一种,那就是像素 ...