SpringMVC表单提交错误400排查思路及解决方案
2017-08-08 16:22
483 查看
前几天在做某一项目时提交表单发现400错误,
如下图所示:
然而根据描述根本无法发现错误所在,于是我对20多个表单项逐一排查,发现!根本就是大海捞针!
于是针对这个错误,检查多次后还是一无所获,于是强行度娘一波,然而并无所获。
最后发现一个帖子提供了一个思路就是将springMVC的日志级别调成DEBUG,瞬间感觉思路清晰了很多。
首先将log4j的jar包导入项目 点我下载jar,
然后再classpath下建立log4j.properties文件,将下列代码复制到文件中,
然后重启项目,尽量使用debug模式进行调试项目,
重新提交表单,观察控制台信息。
观察错误信息发现是数据绑定日期转换错误!
此时的问题已浮现出来!这种分析问题的思路很棒!
因为是在一星期前看到的博客,今天在历史记录里已经找不到原地址,所以没办法提供原址,抱歉!
既然问题找到了,那么下面就来解决一下这个问题!
既然是格式转换错误,我到表单内看了一眼,
发现这个表单我提交了空值,而空值转换为date类型会报错!
度娘了一下SpringMVC日期转换的问题,网上推荐重写springMVC的日期转换方法,
在这里我使用的是更改controller 独享方式,而并没有使用全局方式。
在对应的controller中填写以下方法:
将 new CustomDateEditor(dateFormat, true));的布尔值设置为true:允许输入空值,false:不能为空值;
表单再次提交,发现错误解决!
本文参考该链接SpringMvc 数据绑定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错误
相关文章推荐
- 【解决】springmvc 前台表单提交数据返回400错误
- springmvc form表单提交报400错误,出现400错误的原因及解决方法:
- 【已解决】SpringMVC表单提交结果页面出现400错误的可能原因分析
- springmvc form表单提交报400错误
- SpringMVC form 表单提交报400错误
- 拦截器springmvc防止表单重复提交【3】3秒后自动跳回首页【重点明白如何跳转到各自需要的页面没有实现 但是有思路】
- springmvc提交数据报400错误
- SpringMVC 表单提交 页面返回400
- spring表单标签提交返回400错误问题
- 解决YII提交POST表单出现400错误,以及ajax post请求时出现400问题
- yii2框架中表单提交出现Bad Request (#400)---Unable to verify your data submission的错误解决方
- 提交表单报400错误,提示 “您提交的数据无法验证”
- SpringMVC 防止表单提交的解决方案
- springmvc和json异步提交报400或者500错误或者415错误
- 表单提交 400错误
- 关于esayui ajax前台form表单传值后台springmvc页面报400错误
- Spring提交表单报莫名其妙的400错误
- springmvc使用实体类接收表单提交数据中含有String类型对应Date类型的不匹配报错400时如何处理
- SSM框架中表单提交出现400错误
- SpringMVC 表单提交参数不匹配报错 提交表单报400错:description The request sent by the client was syntactically incorrect.