控制器中现有请求映射的新实现/方法

时间:2015-03-16 17:31:45

标签: spring-mvc broadleaf-commerce

我正在尝试寻找扩展控制器的方法,以便我可以使用现有的请求映射,但使用与之相关的不同实现/方法。

比如说,下面是BLC中 AdminBasicEntityController 的代码段,其中 viewAddEntityForm 方法与 / add 请求映射相关联。现在我想拥有自己的逻辑,使用 / add 请求映射来显示entityForm(Say Product实体)。有可能吗?

@Controller("blAdminBasicEntityController")
@RequestMapping("/{sectionKey:.+}")
public class AdminBasicEntityController extends AdminAbstractController {
    @RequestMapping(value = "", method = RequestMethod.GET)
    public String viewEntityList(HttpServletRequest request, HttpServletResponse response, Model model,
            @PathVariable Map<String, String> pathVars,
            @RequestParam MultiValueMap<String, String> requestParams) throws Exception {
            // default implementation
    }

    @RequestMapping(value = "/add", method = RequestMethod.GET)
    public String viewAddEntityForm(HttpServletRequest request, HttpServletResponse response, Model model,
            @PathVariable  Map<String, String> pathVars,
            @RequestParam(defaultValue = "") String entityType) throws Exception {
            // default implementation
    }
}

此外,我在 AdminBasicEntityController 的文档中找到了以下提到的信息,所以它是否意味着我可以拥有特定实体的控制器。如果是,怎么样?

  

{@link #BroadleafAdminAbstractEntityController}的默认实现。这会将每次调用委托给super,并且不提供任何定制功能。它是   负责为每个不是的实体呈现管理员   由其自己的控制器明确定制

1 个答案:

答案 0 :(得分:0)

@RequestMapping("/{sectionKey:.+}")使用通用路径变量sectionKey,使控制器处理未显式映射的任何请求。例如,

/product
/product/add
/category
/category/add
/store
/store/add
如果这些URL没有显式映射到他们自己的控制器,

可能都会命中这个控制器。

要自己处理特定网址,您可以这样做:

@Controller
@RequestMapping("/product")
public class ProductAdminController {
  @RequestMapping("/add")
  public String viewAddEntityForm(...) { ... }
}

现在,URL /product/add将路由到此自定义控制器,而其他所有控制器将继续路由到通用控制器。

相关问题