【发布时间】:2017-01-11 13:12:45
【问题描述】:
我看到了很多与我类似的问题,但是到目前为止我找不到解决这个问题的方法。
我正在 Spring + Hibernate 上实现网格过滤和分页。 load() 方法必须接收分页的具体参数(page、start 和 limit)和用于过滤的键值参数列表,这就是问题所在。
参数是这样来的:
page:1
start:0
limit:23
filter:[{"operator":"like","value":"tes","property":"desc"},{"operator":"like","value":"teste","property":"model_desc"}]
或(编码版本):
page=1&start=0&limit=23&filter=%5B%7B%22operator%22%3A%22like%22%2C%22value%22%3A%22tes%22%2C%22property%22%3A%22desc%22%7D%2C%7B%22operator%22%3A%22like%22%2C%22value%22%3A%22teste%22%2C%22property%22%3A%22model_desc%22%7D%5D
过滤器参数以String 的形式出现,问题是让Spring 将其解析为ArrayList<Map<String,String>> 或ArrayList<SomeFilterClass>。
这是我的控制器方法的签名(注释的行都不起作用,它们在这里只是为了展示我到目前为止所做的尝试):
public Map<String, Object> loadData(@RequestParam(value = "page", required = true) int page,
@RequestParam(value = "start", required = true) int start,
@RequestParam(value = "limit", required = true) int limit,
// @ModelAttribute("filter") ArrayList<Map<String, String>> filter) {
// @RequestParam(value = "filter", required = false) Map<String, Object>[] filter) {
// @RequestParam(value = "filter", required = false) List<Map<String, String>> filter) {
@ModelAttribute("filter") RemoteFilter filter)
这个类 RemoteFilter 是我根据其他帖子的建议构建的包装类,但是它也不起作用。它的结构是:
public class RemoteFilter {
private ArrayList<Filter> filter;
//Getters and Setters....
class Filter {
private String operator;
private String value;
private String property;
//Getters and Setters....
}
}
如果有人帮助我,我将非常高兴。
谢谢!
【问题讨论】:
-
听起来您正在通过 Ajax 调用控制器,您是否有任何理由使用 GET(并且必须对 JSON 进行 URL 编码)而不是 POST 并使用 Spring @RequestBody 将 JSON 转换为 Java 对象?
标签: java spring data-binding collections