項目中用到ajax進行頁面資料列表的重新整理,調用時需要用到很多查詢條件,以往的做法是用@RequestParam來逐個擷取傳入的參數,但參數多了,@RequestParam的個數會越來越多,查了下資料可以用@RequestBody來接收jason格式的參數列表並自動轉化為自訂對象,但需要引入jackson
<dependency> <groupId>com.jayway.jsonpath</groupId><artifactId>json-path</artifactId><version>0.8.1</version><scope>test</scope></dependency><dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-core-lgpl</artifactId><version>1.8.5</version></dependency><dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-mapper-lgpl</artifactId><version>1.8.5</version></dependency>
ajax中這樣寫:紅色字型代表的field要和java bean中的欄位名一致,這樣jackson才可以自動轉換
function getPageSize() {$.ajax({ type: "post", async: false, url: 'getPageSize', data: JSON.stringify({ sourceId: $("#source").val(), seriesId: $("#series").val(), modelId: $("#model").val(), city : $("#city").val(), strFrom: $("#from").val(), strTo: $("#to").val() }), dataType: "json", contentType: "application/json; charset=utf-8", success: function(data) { ... }, error: function(data){ ... } });}
spring controller 中這樣寫:
@RequestMapping(value = "/queryInfo", method = RequestMethod.POST)@ResponseBodypublic List<Record> queryInfo(@RequestBody SearchCondition condition) { //......}
這樣就可以把ajax中的data轉換為java對象了,不用一個一個參數去擷取了。