@RequestMapping аннотация в Spring MVC - PullRequest
8 голосов
/ 25 января 2012

У меня есть контроллер с отображением запроса как @RequestMapping("/**") Что это значит?

Если я хочу исключить определенный шаблон URL из приведенного выше сопоставления, как бы я это сделал?

Может ли кто-нибудь пролить свет на это?

Ответы [ 2 ]

15 голосов
/ 02 июля 2012

Мне удалось добиться «исключения из URL» или «несоответствия URL» с помощью конструкции Regex «негативный взгляд».

Я хочу, чтобы мой обработчик обрабатывал все, кроме статических ресурсов, то есть CSS / Images / JS и страницы ошибок.

Для предотвращения этого обращения к страницам ошибок, т. Е. ResourceNotFound, вам необходимо

  1. Отредактируйте страницу web.xml / web-app / error-page, добавив префикс ошибки к / error /
  2. Отредактируйте WEB-INF / spring / webmvc-config.xml / beans / mvc: view-controller / @ path, отмените ваши новые отображения
  3. Отредактируйте WEB-INF / spring / webmvc-config.xml / beans / bean [@class = ** SimpleMappingExceptionResolver], чтобы сопоставить все исключения с ошибкой /...

В вашем контроллере используйте ниже

@Controller
@RequestMapping(value = { "/" })
public class CmsFrontendController {

  @RequestMapping(value = { "/" }, headers = "Accept=text/html")
  public String index(Model ui) {
      return addMenu(ui, "/");
  }

  @RequestMapping(value = { "{path:(?!resources|error).*$}", "{path:(?!resources|error).*$}/**" }, headers = "Accept=text/html")
  public String index(Model ui, @PathVariable(value = "path")String path) {
      try {
          path = (String) request.getAttribute(
                  HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
          return addMenu(ui, path);
      } catch (Exception e) {
          log.error("Failed to render the page. {}", StackTraceUtil.getStackTrace(e));
          return "error/general";
      }
  }
}
7 голосов
/ 25 января 2012

Ваш URL будет перехватывать все запросы, соответствующие '/ **'.В зависимости от того, где вы определяете это, я не уверен, почему вы захотите это сделать.На уровне класса это должно определять базовый путь, в то время как на уровне метода его следует уточнять до конкретной функции.

Если вы хотите исключить шаблон, вы можете определить другой контроллер, упорядоченный с более высоким приоритетом по отношению кконтроллер, указывающий '/ **'

Вот 2 хороших ссылки из источника пружины:

  1. http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/web/bind/annotation/RequestMapping.html

  2. http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html

...