Tôi thực sự bị mắc kẹt khi cố gắng ánh xạ các tham số QueryString vào đối tượng Lệnh JavaBean Spring tại đây và tôi không thể tìm thấy câu trả lời câu hỏi của tôi cho đến nay.Không thể ánh xạ các tham số chuỗi truy vấn tới JavaBean của tôi (sử dụng Spring 4 và Datatables)
Tôi đang sử dụng plugin jQuery Datatables với server side processing để mỗi hành động trong dữ liệu của tôi, kích hoạt yêu cầu AJAX cho ứng dụng Spring của tôi.
Đây là các thông số plugin DataTable được gửi đến dịch vụ nghỉ ngơi của tôi:
http://localhost:8080/relatorios/produtos-source?draw=2&columns[0][data]=nome&columns[0][name]=&columns[0][searchable]=true&columns[0][orderable]=true&columns[0][search][value]=&columns[0][search][regex]=false&columns[1][data]=nomesAlternativos&columns[1][name]=&columns[1][searchable]=true&columns[1][orderable]=true&columns[1][search][value]=&columns[1][search][regex]=false&order[0][column]=2&order[0][dir]=asc&start=0&length=10&search[value]=ss&search[regex]=false&_=1400248561282
Đây là cách tôi nhận được nó trong điều khiển Mùa xuân của tôi:
@RequestMapping(value = "/produtos-source", method = RequestMethod.GET)
@ResponseStatus(HttpStatus.OK)
@ResponseBody
public ProdutoTable dataTableRequest(@ModelAttribute DataTableCriterias criterias) {
...
}
Và cuối cùng, đây là của tôi DataTableCriterias JavaBean (thể hiện bằng @ModelAttribute):
public class DataTableCriterias {
private int draw;
private int start;
private int length;
private Map<SearchCriterias, String> search;
private List<Map<OrderCriterias, String>> order;
private List<Column> columns;
public enum SearchCriterias {
value,
regex
}
public enum OrderCriterias {
column,
dir
}
public class Column {
private String data;
private String name;
private boolean searchable;
private boolean orderable;
private Map<SearchCriterias, String> search;
}
}
(get/setters ommited)
Điều này gần như hoạt động hoàn hảo! Nếu tôi loại bỏ dòng này:
private List<Column> columns;
rồi mùa xuân Automagically populates đậu DataTableCriterias tôi từ chuỗi truy vấn (nhưng tất nhiên, tôi không nhận được các cột tài sản ánh xạ)
Nhưng với dòng này nói thêm, tôi nhận được lỗi này:
2014-05-16 17:20:16.605 ERROR 2368 --- [tomcat-http--99] o.a.c.c.C.[.[.[.[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [/relatorios] threw exception [Request processing failed; nested exception is org.springframework.beans.InvalidPropertyException: Invalid property 'columns[0][data]' of bean class [com.bergermobile.rest.domain.DataTableCriterias]: Illegal attempt to get property 'columns' threw exception; nested exception is org.springframework.beans.NullValueInNestedPathException: Invalid property 'columns' of bean class [com.bergermobile.rest.domain.DataTableCriterias]: Could not instantiate property type [com.bergermobile.rest.domain.DataTableCriterias$Column] to auto-grow nested property path: java.lang.InstantiationException: com.bergermobile.rest.domain.DataTableCriterias$Column] with root cause
org.springframework.beans.NullValueInNestedPathException: Invalid property 'columns' of bean class [com.bergermobile.rest.domain.DataTableCriterias]: Could not instantiate property type [com.bergermobile.rest.domain.DataTableCriterias$Column] to auto-grow nested property path: java.lang.InstantiationException: com.bergermobile.rest.domain.DataTableCriterias$Column
at org.springframework.beans.BeanWrapperImpl.newValue(BeanWrapperImpl.java:651)
Như tôi đã nhìn thấy nó, vấn đề chính là các tham số 'cột' gửi bởi plugin DataTable là một hai chiều và đôi khi cũng là một mảng tridimensional:
columns[0][data]=nome
columns[0][search][regex]=false
Vì vậy, có vẻ như Bean của tôi đã chính xác, nhưng tôi gặp phải lỗi này và giờ tôi đã bị kẹt.
Bất kỳ ý tưởng nào?
Cảm ơn rất nhiều!
Hmm, tôi không hiểu. cột [0] không có mục nhập, đó là: cột [0] [dữ liệu] = nome cột [0] [tìm kiếm] [regex] = false Dù sao, tôi đã cố gắng thêm hàm tạo này vào lớp DataTableCriterias của tôi: DataTableCriterias công cộng() { \t \t cột = new ArrayList(); \t} Nhưng vẫn không có may mắn (lớp được tự động khởi tạo bởi Spring khi tôi nhận nó dưới dạng @ModelAttribute trong Bộ điều khiển của tôi) –
Berger
@Berger 'DataTableCriterias.columns' là' null'. Nó không thể có mục. – zeroflagL