스프링 MVC는 방법은 @RequestMapping 주석, 또는 좀 더 정확하게 당신이 @RequestMapping과 함께 최우선 방법에 주석을 허용하지 않고 기본 클래스에 매핑을 사용합니다 오버라이드 (override) 할 수 없습니다.
하지만 기본 클래스에는 항상 두 가지 메소드를 정의 할 수 있습니다. 하나는 @RequestMapping으로 주석 처리되고 두 번째는 주석 처리되지 않습니다. 그런 다음 하위 클래스의 두 번째 메소드를 자유롭게 재정의 할 수 있습니다. 예 : CRUD 컨트롤러
추상 기본 클래스
@Controller
@RequestMapping(ProcessController.PREFIX)
public class ProcessController extends AbstractCRUDController<Integer, ProcessQ> {
public static final String PREFIX = "/process";
@Override
public String getPrefix() {
return PREFIX;
}
@Override
protected String doShow(ProcessQ process, HttpSession session, Model model,
int pageSize, WebRequest request, boolean all) {
String viewName = super.doShow(process, session, model, pageSize, request, all);
// specialized processing for class ProcessQ
...
return viewName;
}
...
}
예는 실제 프로그램에서 가져 클래스 ProcessQ에 대한
콘크리트 구현, 그건 당신이 매김 요소를 볼 수있는 이유입니다
public abstract class AbstractCRUDController<K extends Serializable, X>
// X is the data class, K is the class of the key (int or String)
@RequestMapping({"/{data}"})
public String show(@ModelAttribute("data") X data, HttpSession session, Model model,
@RequestParam(value = "pagesize", required = false, defaultValue = "-1") int pageSize,
WebRequest request,
@RequestParam(value = "all", defaultValue = "false") boolean all) {
return doShow(data, session, model, pageSize, request, all);
}
protected String doShow(X data, HttpSession session, Model model,
int pageSize, WebRequest request, boolean all) {
return this.getPrefix() + "/view";
}
@RequestMapping(value={"/{data}/edit"}, method=RequestMethod.GET)
public String edit(@ModelAttribute("data") X data, Model model) {
return doEdit(data, model);
}
protected String doEdit(@ModelAttribute("data") X data, Model model) {
model.addAttribute("title", editTitle);
return this.getPrefix() + "/edit";
}
@RequestMapping(value={"/{data}/edit"}, method=RequestMethod.POST)
public String update(@ModelAttribute("data") X data, BindingResult result, Model model) {
if (data == null) {
throw new NoSuchElementException();
}
if (save(data, result, model, SimpleSaveType.UPDATE, null) != null) {
return "redirect:" + savedUrl(data);
}
else {
model.addAttribute("title", editTitle);
return getPrefix() + "/edit";
}
}
public K save(X data, BindingResult result, Model model, SaveType saveType, K id) {
...
}
...
public abstract String getPrefix();
}
, 오류 처리 및 기본 요청에 대한 액세스.