SpringMVC表单提交错误400排查思路及解决方案

本文介绍了一种解决SpringMVC项目中表单提交时出现400错误的方法。通过调整log4j日志级别为DEBUG,发现了日期格式转换错误的问题,并提供了修改Controller实现日期格式自定义处理的具体方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前几天在做某一项目时提交表单发现400错误,

如下图所示:

然而根据描述根本无法发现错误所在,于是我对20多个表单项逐一排查,发现!根本就是大海捞针!

于是针对这个错误,检查多次后还是一无所获,于是强行度娘一波,然而并无所获。

最后发现一个帖子提供了一个思路就是将springMVC的日志级别调成DEBUG,瞬间感觉思路清晰了很多。

一、思路排查

首先将log4j的jar包导入项目 点我下载jar

然后再classpath下建立log4j.properties文件,将下列代码复制到文件中,

log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
log4j.appender.stdout.Target=System.out  
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
log4j.appender.stdout.layout.ConversionPattern=%d %5p %c{1}:%L - %m%n  
  
log4j.appender.file=org.apache.log4j.RollingFileAppender  
log4j.appender.file.File=${catalina.home}/logs/ddoMsg.log  
log4j.appender.file.MaxFileSize=1024KB  
log4j.appender.file.MaxBackupIndex=100  
log4j.appender.file.layout=org.apache.log4j.PatternLayout  
log4j.appender.file.layout.ConversionPattern= %d{yyyy-MM-dd HH:mm:ss} %5p %c %t: - %m%n  
  
#INFO WARN ERROR DEBUG  
log4j.rootLogger=WARN, file, stdout  
org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog  
log4j.logger.org.springframework=DEBUG
log4j.logger.com.jason.ddoMsg=debug  

然后重启项目,尽量使用debug模式进行调试项目,

重新提交表单,观察控制台信息。

Field error in object 'foreignerinfo' on field 'passportIssue': rejected value [1]; codes [typeMismatch.foreignerinfo.passportIssue,typeMismatch.passportIssue,typeMismatch.java.util.Date,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [foreignerinfo.passportIssue,passportIssue]; arguments []; default message [passportIssue]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'passportIssue'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type java.lang.String to type java.util.Date for value '1'; nested exception is java.lang.IllegalArgumentException: Unable to parse '1']
  2017-05-11 20:43:36,952 DEBUG ResponseStatusExceptionResolver:132 - Resolving exception from handler [public java.lang.String com.naah.controller.Continue.Table.ForeignerInfoTable.Ins(com.naah.PO.Foreignerinfo,com.naah.PO.Visa,com.naah.PO.Whereabouts,javax.servlet.http.HttpSession)]: org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors

观察错误信息发现是数据绑定日期转换错误

此时的问题已浮现出来!这种分析问题的思路很棒!

因为是在一星期前看到的博客,今天在历史记录里已经找不到原地址,所以没办法提供原址,抱歉!

二、解决问题

既然问题找到了,那么下面就来解决一下这个问题!

既然是格式转换错误,我到表单内看了一眼,

发现这个表单我提交了空值,而空值转换为date类型会报错!

度娘了一下SpringMVC日期转换的问题,网上推荐重写springMVC的日期转换方法,

在这里我使用的是更改controller 独享方式,而并没有使用全局方式。

在对应的controller中填写以下方法:

@InitBinder
	public void initBinder(WebDataBinder binder)
	{
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
		dateFormat.setLenient(false);
		binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
	}

将 new CustomDateEditor(dateFormat, true));的布尔值设置为true:允许输入空值,false:不能为空值;

表单再次提交,发现错误解决!

本文参考该链接SpringMvc 数据绑定400错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值