我想要做的是使用@RequestParam将地图传递给Controller中的方法,但它似乎不起作用.虽然这在Struts 2中可用作值绑定.
以下是我正在尝试的:在使用JQuery的JSP中:
var order = {};
order['seq'] = "ASC";
var criteria = {};
criteria['label'] = "Directory";
$.post(context + 'menu/list',
{"orders" : order,
"criterias" : criteria}
Run Code Online (Sandbox Code Playgroud)
我要发布的参数是"地图"对象顺序和列表菜单的条件.在Java中:
@RequestMapping("/{collection}/list")
public @ResponseBody Map<String, ? extends Object> list(@PathVariable String collection,
@RequestParam("criterias") Map<String, String> criteria,
@RequestParam("orders") Map<String, String> order) {
Run Code Online (Sandbox Code Playgroud)
但是,当我在Java中打印出地图标准和顺序时,它将获取以下所有值:
Criteria: {criterias[label]=Directory, orders[seq]=ASC}
Order: {criterias[label]=Directory, orders[seq]=ASC}
Run Code Online (Sandbox Code Playgroud)
可以使用Spring中的@RequestParam来初始化Map参数吗?
我已经在一个Controller中映射了我的一个方法,以通过@ResponseBody返回JSON对象.
@RequestMapping("/{module}/get/{docId}")
public @ResponseBody Map<String, ? extends Object> get(@PathVariable String module,
@PathVariable String docId) {
Criteria criteria = new Criteria("_id", docId);
return genericDAO.getUniqueEntity(module, true, criteria);
}
Run Code Online (Sandbox Code Playgroud)
但是,它将我重定向到JSTLView.比如,如果{module}是product并且{docId}是2,那么在控制台中我发现:
名为'xxx'的DispatcherServlet处理[/ xxx/product/get/2]的POST请求渲染视图[org.springframework.web.servlet.view.JstlView:name'product/get/2'; 名为"xxx"的DispatcherServlet中的URL [/WEB-INF/views/jsp/product/get/2.jsp]]
怎么会发生这种情况?在同一个Controller中,我有另一种类似于此的方法,但运行正常:
@RequestMapping("/{module}/list")
public @ResponseBody Map<String, ? extends Object> list(@PathVariable String module,
@RequestParam MultiValueMap<String, String> params,
@RequestParam(value = "page", required = false) Integer pageNumber,
@RequestParam(value = "rows", required = false) Integer recordPerPage) {
...
return genericDAO.list(module, criterias, orders, pageNumber, recordPerPage);
}
Run Code Online (Sandbox Code Playgroud)
上面的do返回正确,为我提供了我需要的对象列表.有谁帮我解开谜团?