错误的具体内容是:2018-12-03 12:40:06.850 [http-nio-80-exec-3] WARN o.s.w.s.m.support.DefaultHandlerExceptionResolver - Failed to bind request element: org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'int'; nested exception is java.lang.NumberFormatException: For input string: "orderBook"。
检查了半天,感觉自己程序上没写错,但是后来通过自己的检查发现了自己的错误!我这里的逻辑的是同一个带参的url去请求一个页面,然后在页面中有通过ajax提交数据。
错误代码:
@RequestMapping("/bookinfo/{id}")
public String deGet(HttpServletRequest request,
HttpServletResponse response, @PathVariable(name = "id") int id,
Model model) throws ServletException, IOException {
$.ajax({
type:"post",
contentType:"application/json",
data:data,
url:"/borrow/book",
dataType:"json",
success: function (datas) {
if(datas==1){
alert("请将书自己取出");
}
else if(datas==2){
alert("您最多借三本书");
}
else{
var m=confirm("其他人已经借走,你要预定吗?");
if(m==true){
var a="[[${bookinfo1.id}]]";
var b="[[${bookinfo1.bookname}]]";
var c="[[${bookinfo1.book}]]";
var d=$("#time").val();
dldata={"time":d,"id":a,"openid":b,"book":c};
var data=JSON.stringify(dldata);
$.ajax({
url:"/orderBook",
type:"post",
data:data,
contentType:"application/json",
dataType:"json",
success:function(datas){
/*执行的函数*/
....
我这两次上传,第一个ajax上传的url并不会出错,但是第二个就会出错,原因是因为我的第一个映射是:/bookinfo/{id},而后面的都是没有/{id}的,也就是没有这个参数,程序会把我的url当成int类型的参数,而我的url是String类型的,因此就会出现这个错误。其实解决方法有两种,第一种是在/bookinfo/{id}的后面再加上一个/name,这个加上什么都行,这里只是个例子。
或者就是在我其他url后面加上带参数的url:如一下代码所示:
$.ajax({
url:"/orderBook/1",
type:"post",
data:data,
contentType:"application/json",
dataType:"json",
虽然带上了一个参数,但是你在controller层可以不用传递过去的参数,之后就会发现,错误已经解决!。