gpt4 book ai didi

java - Spring:在 Controller 参数上绑定(bind)集合

转载 作者:行者123 更新时间:2023-12-01 09:01:59 24 4
gpt4 key购买 nike

我见过很多与我的问题类似的问题,但是到目前为止我找不到解决这个问题的方法。

我正在 Spring + Hibernate 上实现网格过滤和分页。 load()方法必须接收分页的特定参数( pagestartlimit )以及用于过滤的键值参数列表,这就是问题所在。

参数是这样的:

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> .

这是我的 Controller 方法的签名(注释行都不起作用,它们在这里只是为了展示我到目前为止所尝试的内容):

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....
}
}

如果有人帮助我,我将非常高兴。

谢谢!

最佳答案

尝试 POST 数据而不是使用 GET,Spring 仅在发布数据时提供 JSON 到 Java 的转换。

发帖

{ 
page:1
start:0
limit:23
filter:[{"operator":"like","value":"tes","property":"desc"},{"operator":"like","value":"teste","property":"model_desc"}]
}

并让 Controller 使用@RequestBody

@RequestMapping(method = RequestMethod.POST, value = "url", 
produces = MimeTypeUtils.APPLICATION_JSON_VALUE,
consumes = MimeTypeUtils.APPLICATION_JSON_VALUE)
public Map<String, Object> loadData(@RequestBody RemoteFilter filter) {

}

响应使用Object作为Map值类型。这会起作用,但是使用未键入的返回值通常是一件坏事。

关于java - Spring:在 Controller 参数上绑定(bind)集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41591889/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com