2017-02-22 58 views
0

Я работаю над фреймворком Spring MVC, я использую аннотации для контроллеров сопоставлений. Я использую некоторые общие слова преобразования и общие методы в каждом классе контроллера.Добавить префикс к аннотированному значению и использовать в методе переопределения в качестве другого аннотированного значения в Java Spring Framework

example: 
@RequestMapping(value = "/employee_job/list") 
@RequestMapping(value = "/employee_job/list_json") 
@RequestMapping(value = "/employee_job/add") 
@RequestMapping(value = "/employee_job/update") 
@RequestMapping(value = "/employee_job/delete") 

Это контролер employee_job. Итак, я создаю интерфейс с частичным отображением, и разработчик добавит префикс в это значение. здесь код интерфейса:

@Controller 
public interface CommonController { 

    @RequestMapping(value = "/list") 
    public String showList(Model model); 
    @RequestMapping(value = "/list_json") 
    public String showListJson(Model model); 
    @RequestMapping(value = "/add") 
    public String add(Model model); 
    @RequestMapping(value = "/update") 
    public String update(Model model); 
    @RequestMapping(value = "/delete") 
    public String delete(Model model);  
} 

Я хочу реализовать это следующим образом:

public class EmployeeJobController implements CommonController{ 

    private static final String prefix = "/employee_job"; 

     @Override 
     @RequestMapping(value = prefix+value) 
     public String showList(Model model){ 
      //some code here 
     } 

     @Override 
     @RequestMapping(value = prefix+value) 
     public String showListJson(Model model){ 
      //some code here 
     } 

     @Override 
     @RequestMapping(value = prefix+value) 
     public String add(Model model){ 
      //some code here 
     } 

     @Override 
     @RequestMapping(value = prefix+value) 
     public String update(Model model){ 
      //some code here 
     } 

     @Override 
     @RequestMapping(value = prefix+value) 
     public String delete(Model model){ 
      //some code here 
     } 
    } 

Но я получаю сообщение об ошибке "value cannot be resolved to a variable".

Что может быть правильным способом?

Спасибо.

ответ

0

Где вы определяете: value?

В аннотациях вы можете использовать только static final Строки. Что-то вроде prefix+"/add" должен работать

приятнее решение будет

@RequestMapping("/employee_job") 
public class EmployeeJobController { 
    @RequestMapping("/add") 
    public String add(...) {...} 
    ... 
} 
-1

Объявите переменные в интерфейсе CommonController. Используйте эти переменные в классе EmployeeJobController.

@Controller общедоступный интерфейс CommonController {

public static final String showListStr="/list"; 

@RequestMapping(value = "/list") 
public String showList(Model model); 
@RequestMapping(value = "/list_json") 
public String showListJson(Model model); 
@RequestMapping(value = "/add") 
public String add(Model model); 
@RequestMapping(value = "/update") 
public String update(Model model); 
@RequestMapping(value = "/delete") 
public String delete(Model model);  

}

и в использовании класса ребенка эта переменная

общественного класса EmployeeJobController реализует CommonController {

private static final String prefix = "/employee_job"; 

    @Override 
    @RequestMapping(value = prefix+showListStr) 
    public String showList(Model model){ 
     //some code here 
    } 

    @Override 
    @RequestMapping(value = prefix+value) 
    public String showListJson(Model model){ 
     //some code here 
    } 

    @Override 
    @RequestMapping(value = prefix+value) 
    public String add(Model model){ 
     //some code here 
    } 

    @Override 
    @RequestMapping(value = prefix+value) 
    public String update(Model model){ 
     //some code here 
    } 

    @Override 
    @RequestMapping(value = prefix+value) 
    public String delete(Model model){ 
     //some code here 
    } 
}