HTTPERROR400的问题解决
今天写添加功能,在点添加提交时报了⼀个“HTTP ERROR 400”的错误,如图,
请求提交的代码死活跳转不到后台,郁闷中,开启debug功能,开始⼀步步排查,
到了报错的那条请求,原以为是请求中没有域名的问题,看到请求中域名与参数都是有的,那么会是什么错呢?与同事讨论,说会不会是带的参数有问题,好吧
这也是⼀条思路,把这条请求取出来:
先把完整的放在浏览器中测试,浏览器中,果断报错,好吧,算是到了⼀点⼩进步,那么下⼀步,开始减少传递的参数⼀步⼀步的试吧,⾸先把最后⼀个参数(&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>error parse new
<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"> ;保存 </button>
<button type="button" class="button" onclick="javascript:art.dialog.close();"> ;关闭 </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')bobox({
data:JSON.parse('${deviceTypeCombo}'),
panelHeight:'auto',
editable:false,
value:1
});
$('#regionId')bobox({
data:JSON.parse('${regionCombo}'),
panelHeight:'auto',
editable:false,
// value:1
});
$('#controltId')bobox({
data:JSON.parse('${controltCombo}'),
panelHeight:'auto',
editable:false,
// value:1
});
$('#status')bobox({
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.UserObj(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框架有没有这个问题,需要待验证

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。