2015-03-16 1 views
1

Я пытаюсь найти способ расширения контроллера таким образом, чтобы я мог использовать существующее сопоставление запросов, но с другой привязкой к нему.Новая реализация/метод существующего сопоставления запросов в контроллере

Скажем, например, ниже приведен фрагмент кода из AdminBasicEntityController в BLC, где viewAddEntityForm метод привязан к /добавить отображение запроса. Теперь я хочу иметь свою собственную логику отображения entityForm (Say Product entity) с использованием /add сопоставления запросов. Является ли это возможным?

@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}. Это делегирует каждый вызов супер и не предоставляет никаких настраиваемых функций. Это отвечает за предоставление администратора для каждого объекта, который не явно настроен своего собственного контроллером

ответ

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 будет направлен на этот пользовательский контроллер в то время как все остальные будут продолжать получать направляются на общий контроллер.

+0

gr8 информация. Благодаря тонну !!! – Prabhat

Смежные вопросы