nterfaz de controlador anotado @Spring MVC con @ PathVariable
¿Hay alguna razón para no asignar Controladores como interfaces?
En todos los ejemplos y preguntas que veo en torno a los controladores, todas son clases concretas. ¿Hay alguna razón para esto? Me gustaría separar las asignaciones de solicitud de la implementación. Sin embargo, golpeé una pared cuando intenté obtener un@PathVariable
como parámetro en mi clase concreta.
a interfaz de @My Controller se ve así:
@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);
}
Y la clase implementadora:
@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);
}
}
LosgetGoals()
l método @ funciona muy bien; elremoveGoal(String id)
lanza una excepción
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
Si agrego el@PathVariable
anotación a la clase concreta todo funciona como se esperaba, pero ¿por qué debería volver a declarar esto en la clase concreta? ¿No debería ser manejado por lo que tenga la@Controller
anotación @