jsp 經過jquery 提交 form數據到springMVC 400錯誤

springmvc form表單提交報400錯誤,出現400錯誤的緣由及解決方法:java

緣由:ajax

在SpringMVC中的Action中處理前臺ajax請求傳過來的json數據直接轉成對應的實體類時出錯:400 Bad Request,後臺也不報錯,400指的的是請求無效(請求有語法問題或者不能知足請求)。spring

1:通常最多見的就是後臺的實體類bean與前臺穿過的類型不匹配,如你的javabean中有定義了Date類型和int類型的成員變量,致使轉化器在把json數據轉化成bean時不能轉化。數據庫

2:log4j的配置文件裏錯誤將部分log打爲Info級別所致json

3:要返回json的卻忘了加@ResponseBodymvc

4:ajax請求的鏈接後邊忘了加參數,如url:basePath + "kscj/unbill.do?jqid="+jqidsapp

 

5:傳了非實體bean屬性的參數過來。數據庫設計

6:controller指定的參數名稱與前臺不一致,如:使用了@RequestParam(value="userName")而前臺必須指定該名稱函數

 

[java] view plain copyui

  1. @RequestMapping("/hello.do")    
  2. public String hello(HttpServletRequest req,HttpServletResponse resp,@RequestParam(value="userName")String user ){    
  3.     request.setAttribute("user", user);    
  4.     return "hello";    
  5. }   

也能夠指定該參數是非必須的required=false,如:

 

[java] view plain copy

  1. @RequestMapping("/hello.do")    
  2. public String hello(HttpServletRequest req,HttpServletResponse resp,@RequestParam(value="userName",required=false)String user){    
  3.    request.setAttribute("user", user);    
  4.    return "hello";    
  5. }   

 

解決方法:

1:把實體類的javabean裏邊的類型都改爲string類型,在配置SQL語句時用數據庫函數to_date或者to_number轉化的,若是再java中用到這個字符串類型的日期的話,有必要的話,就用For format=new SimpleDateFormat("yyyy-MM-dd"),format.parse()來轉換。

2:在對應的實體類的對應的非字符串類型的變量的setter方法中傳入string類型的,而後在裏邊用SimpleDateFormat或者Integer進行轉化。

如:public void setBjsj(Date bjsj) {
        this.bjsj = bjsj;
    }    
變成

public void setBjsj(String bjsj) throws ParseException {
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         this.bjsj =sdf.parse(bjsj) ;

}

備註:

3:在實體類的日期屬性上加@DateTimeFormat(pattern="yyyy-MM-dd")註解。

Spring提供了FormattingConversionService和DefaultFormattingConversionService來完成對象的解析和格式化。

首先引入格式化jar:把Joda-Time包添加到以前的項目中,這裏用的是joda-time-2.3.jar,而後在實體類中這樣寫:

@NumberFormat(style=Style.CURRENCY)

private double money;

@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") 

 private Date date; 

注意:這裏的money和date再也不是String類型,而是它們本身原本的類型。

 

總結:方法2和方法3我實行過,對於字段很是少的狀況下是可行的。可是對於字段很是多的狀況下,這樣錯是一件很是可怕的事情。實際開發中數據庫設計是由公司數據庫人員本身定義的,假如日期類型和數值類型,公司就明確規定使用Date和Integer類型,那麼轉換是必需要作的。

相關文章
相關標籤/搜索