初学spring遇到的400问题

    xiaoxiao2021-03-25  77

    这几天在学习spring,练习的时候遇到这么一个问题。

    HTTP Status 400 -


    type Status report

    message

    description The request sent by the client was syntactically incorrect.


    Apache Tomcat/7.0.69

    控制台没有任何显示,看到这个的我也是一脸懵逼。后来使用log打印信息,后来用log打印的时候出现了这么一个异常。 DEBUG org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver  - Resolving exception from handler [com.huaxin.controller.BookController@6402ff64]: org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'int'; nested exception is java.lang.NumberFormatException: For input string: "book_update" 我这一看不是类型转换异常吗,不对啊spring的依赖注入是支持类型之间的转化的。后经过百度发现 了这么些东西 Failed to convert value of type 'java.lang.String' to required type 'int';  这种出现的原因是你的pojo类中的参数名字和表单中参数的名字不一致。 我又对比了一下没有任何不一致,然后又是百度,各式各样的回答。导致我越来越偏离正确的道路。 后来我又回过头认真的看了一下日志信息。终于发现了问题 Matching patterns for request [/book_edit/book_update] are [/book_edit/{id}] 7895 [http-bio-80-exec-6] DEBUG org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping  - Matching patterns for request [/book_edit/book_update] are [/book_edit/{id}] 其实已经说的很清楚了 匹配url的时候 将book_update这个映射赋值给了 id 也就出现了不能讲字符串转化成int类型的typeMisMatchException 其实就是我的url映射写错了 原先的‘book_update’应该改为“/应用程序名/bookupdate”的绝对路径 可是我在添加书籍的时候的url映射也是“”book_input”这种类似写法的  我以为提交表单时会自动映射到相应的RequestMapping("/")里面的value 其实不然 原先增加书籍的时候的url是这样的 http://localhost/SpringTest3/book_input  然后提交表单的时候的form是这样的 <form:form commandName="book" action="book_save" method="post"> 修改书籍的url是这样的http://localhost/SpringTest3/book_edit/1       提交表单的时候我是这样的(错误的写法)<form:form commandName="book" action="book_update" method="post"> 经过比较发现当你提交的时候 url会默认网上一层  于是我的url就是这样的http://localhost/SpringTest3/book_edit/book_update  而正确的应该是http://localhost/SpringTest3/book_update 于是就出现了上面将url作为参数传入的可笑bug 几经思考 其实我如果当时能认真的看一下 好好思考一下就不会浪费那么多时间了,我觉得不只是我,很多人再出现问题的时候直接将错误信息复制百度,有的时候运气好能找到,然后虽然很多错误提示是一样的,但出错的方式是不一样的,就好比一个人感冒的症状是一样的,但是病因确实不同的。 所以以后出现问题的时候 1仔细观察log打印的提示,思考可能的原因。 2不可断章取义,只是将出现的某一个错误信息进行百度。应该中和所有出现的问题找出中心错误进行百度 3学会百度,百度答案各式各样,有选择的查找出适合自己的答案,切不可浪费时间在百度上,独立思考,推敲分析才是主要的。 4当你的所推想的解决法案依然有种种疑点 那么这个方法一定是错的,就不要浪费时间去尝试。 5切记先入为主的想法,这种想法会让你陷入死胡同,不要仅仅凭借错误信息就想当然的认为是某种错误,这种思想是及其可怕的。 6注意细节,细节决定成败,任何引起你一点点疑问的信息都不要忽视。 再看看我出现的问题  如果我不是早早的先入为主以为是自己的类型不匹配的问题 ,而是仔细看一下log打印的信息就不会浪费一上午的时间,想想就郁闷。 一旦你陷入为主的去思考问题的时候,哪怕答案放在你眼前,你也会选择性忽视。
    转载请注明原文地址: https://ju.6miu.com/read-41012.html

    最新回复(0)