Spring mvc - Как я могу получить информацию о сопоставлении в Intercetor

Spring mvc - Как я могу получить информацию о сопоставлении в перехватчике?

ex - Когда пользователь запрашивает URL-адрес / user / 12345, я хочу получить строку / user / {id} в перехватчике. Как я могу сделать?

@Override
public boolean preHandle(HttpServletRequest request,
                         HttpServletResponse response, Object handler) throws Exception {

    String mappingUri = someMethod(); // get "/post/{id}"; but not /post/12345

    return true;
}

person Jaime    schedule 31.10.2014    source источник


Ответы (2)


Я действительно не рекомендую это делать. Имя идентификатора для элемента пути должно быть известно только методу обработчика контроллера. Вашему перехватчику незачем знать об этом. Более того, если эта логика применима только к этому отображению, вы также можете поместить ее в метод обработчика и использовать @PathVariable.

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    Map<String, String> uriTemplateVars = (Map<String, String>) request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);
    return true;
}

Теперь вы можете использовать любой ключ, например "id", чтобы получить элемент пути из uriTemplateVars.

person Sotirios Delimanolis    schedule 31.10.2014
comment
Когда я запрашиваю / user / 12345, это результат {ids = 12345} - person Jaime; 05.11.2014
comment
@ 한국인 uriTemplateVars - это Map. Извлеките из него нужную запись. uriTemplateVars.get("ids") - person Sotirios Delimanolis; 05.11.2014

Возврат кода ниже ["/ user / {id}"]

public static List<String> getMappingInfo(HandlerMethod method) {
        String prefixs[] = method.getBean().getClass().getAnnotation(RequestMapping.class).value();
        if (ArrayUtils.isEmpty(prefixs))
            prefixs = new String[] { "" };

        String mappings[] = method.getMethod().getAnnotation(RequestMapping.class).value();

        List<String> info = new ArrayList<>();
        for (String prefix : prefixs) {
            for (String mapping : mappings) {
                info.add(prefix + "/" + mapping);
            }
        }

        return info;
    }
person Jaime    schedule 05.11.2014
comment
Вы пытались получить отображение или значение, привязанное к отображению? - person Sotirios Delimanolis; 05.11.2014