我正在尝试寻找扩展控制器的方法,以便我可以使用现有的请求映射,但使用与之相关的不同实现/方法。
比如说,下面是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,并且不提供任何定制功能。它是 负责为每个不是的实体呈现管理员 由其自己的控制器明确定制
答案 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
将路由到此自定义控制器,而其他所有控制器将继续路由到通用控制器。