Hi I am creating a spring mvc app. The spring context seems to be mapping the controller methods to wrong urls.
I've following controllers:
HelloWorldController
package com.springapp.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; @Controller @RequestMapping("/hello") public class HelloWorldController { @RequestMapping(method = RequestMethod.GET) public ModelAndView helloWorld() { String message = "Hello World, Spring 3.0!"; return new ModelAndView("hello", "message", message); } } ContactsController
package com.springapp.controller; import com.springapp.form.Contact; import com.springapp.service.ContactService; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.SessionAttributes; import org.springframework.web.servlet.ModelAndView; @Controller @RequestMapping("/contacts") public class ContactsController { @Autowired private ContactService contactService; @RequestMapping(method = RequestMethod.GET) public String listContacts(Model map) { map.addAttribute("contact", new Contact()); map.addAttribute("contactList", contactService.listContacts()); return "contact"; } @RequestMapping(value="{contactId}", method=RequestMethod.GET) public String showContact(@PathVariable("contactId") Integer contactId) { contactService.getContact(contactId); return "redirect:/contacts"; } @RequestMapping(value = "/add", method = RequestMethod.POST) public String addContact(@ModelAttribute("contact") Contact contact, BindingResult result) { contactService.addContact(contact); return "redirect:/contacts"; } @RequestMapping("/{contactId}/delete") public String deleteContact(@PathVariable("contactId") Integer contactId) { contactService.removeContact(contactId); return "redirect:/contacts"; } } However the spring context is mapping them as:
INFO: Mapped URL path [/contacts/new] onto handler 'contactsController' INFO: Mapped URL path [/contacts/new.*] onto handler 'contactsController' INFO: Mapped URL path [/contacts/new/] onto handler 'contactsController' INFO: Mapped URL path [/contacts/addContact] onto handler 'contactsController' INFO: Mapped URL path [/contacts/addContact.*] onto handler 'contactsController' INFO: Mapped URL path [/contacts/addContact/] onto handler 'contactsController' INFO: Mapped URL path [/contacts/delete/{contactId}] onto handler 'contactsController' INFO: Mapped URL path [/contacts/delete/{contactId}.*] onto handler 'contactsController' INFO: Mapped URL path [/contacts/delete/{contactId}/] onto handler 'contactsController' INFO: Mapped URL path [/hello] onto handler 'helloWorldController' INFO: Mapped URL path [/hello.*] onto handler 'helloWorldController' INFO: Mapped URL path [/hello/] onto handler 'helloWorldController' Where is it getting these new and addContact patterns? Also the mapping /contacts is missing.
ContactsController. Are you sure you posted code and log from the same version?addContactmapping in the ContactsController earlier, which I later updated to justadd. As you can see I've also changed the mapping fordeleteContactbut it is not taking effect.