Есть ли какая-либо причина не отображать контроллеры в качестве интерфейсов?
Во всех примерах и вопросах, которые я вижу окружающих контроллеров, все являются конкретными классами. Для этого есть причина? Я хотел бы отделить отображения запросов от реализации. Я ударил стену, хотя, когда я попытался получить @PathVariable
в качестве параметра в моем конкретном классе.
Интерфейс My Controller выглядит следующим образом:
@Controller
@RequestMapping("/services/goal/")
public interface GoalService {
@RequestMapping("options/")
@ResponseBody
Map<String, Long> getGoals();
@RequestMapping(value = "{id}/", method = RequestMethod.DELETE)
@ResponseBody
void removeGoal(@PathVariable String id);
}
И реализующий класс:
@Component
public class GoalServiceImpl implements GoalService {
/* init code */
public Map<String, Long> getGoals() {
/* method code */
return map;
}
public void removeGoal(String id) {
Goal goal = goalDao.findByPrimaryKey(Long.parseLong(id));
goalDao.remove(goal);
}
}
Метод getGoals()
отлично работает; removeGoal(String id)
выдает исключение
ExceptionHandlerExceptionResolver - Resolving exception from handler [public void
todo.webapp.controllers.services.GoalServiceImpl.removeGoal(java.lang.String)]:
org.springframework.web.bind.MissingServletRequestParameterException: Required
String parameter 'id' is not present
Если я добавлю аннотацию @PathVariable
к конкретному классу, все будет работать так, как ожидалось, но почему мне нужно повторно объявить это в конкретном классе? Не следует ли обрабатывать все, что есть аннотация @Controller
?