Spring MVC N个参数映射

时间:2014-01-03 14:04:26

标签: java spring-mvc url-mapping

我尝试在这样的网址中绑定N个参数

/web/appl/<applname>/rule/<rulename>/<attrname1>/<attrval1>/<attrname2>/<attrval2>/.../<attrnameN>/<attrvalN>

@RequestMapping(value = "/web/appl/{applname}/rule/{rulename}/{attributes}", method = RequestMethod.GET)
public Object GetService(HttpServletRequest request, @PathVariable("attributes") Map<String, Object> map,
                @PathVariable("applname") String applname, @PathVariable("rulename") String rulename)
                throws Exception {
                  ...
                }

但无法获得<attrval1>/<attrname2>/<attrval2>/.../<attrnameN>/<attrvalN>

的值

2 个答案:

答案 0 :(得分:0)

不幸的是,Spring MVC没有提供这样的解决方案。您可以将Matrix Variables视为替代方案。

如果您更喜欢坚持当前的URI方案,那么您必须自己实施解决方案。一种方法是使用路径模式。例如:

@RequestMapping(value = "/web/appl/{applname}/rule/{rule name}/**")
public Object getService(HttpServletRequest request,
            @PathVariable("applname") String applname ...) {
    String attributesPart = new AntPathMatcher()
        .extractPathWithinPattern("/web/appl/{applname}/rule/{rule name}/**", 
            request.getServletPath());
    ...

你可以实现你的参数解析器。像

这样的东西
@RequestMapping(value = "/web/appl/{applname}/rule/{rule name}/**")
public Object getService(@MyAttributes Map<String, String> attributes,
            @PathVariable("applname") String applname ...) {

答案 1 :(得分:0)

使用

String urlAttributes = (String) request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);

并获取整个网址。然后根据您的需要解析此URL,如果您没有得到

<attrval1>/<attrname2>/<attrval2>/.../<attrnameN>/<attrvalN>

以正确的顺序然后你可以抛出异常。