Spring 3.1 MVC: GET & POST on the same mapping, can it work? -


i'm learning spring 3.1.

my webapp name "acme".

the url https://blah.blah.blah/acme

that url set display login.jsp

i have "/login" mapping in controller login.jsp submits to

if goes wrong return user login.jsp url in browser: https://blah.blah.blah/acme/login

the "/login" mapping set handle post requests, concerned users bookmarking https://blah.blah.blah/acme/login, , getting error message of "get request not supported"

so, thought put in function handle requests /login reroute through general mapping handler "/" , "/home":

login.controller.java

package gov.noaa.acme.controller;  import java.security.principal; import javax.servlet.http.*;  import org.springframework.stereotype.controller; import org.springframework.validation.*; import org.springframework.ui.modelmap; import org.springframework.web.servlet.modelandview; import org.springframework.web.bind.annotation.requestparam; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.requestmethod; import org.springframework.web.bind.annotation.modelattribute; import org.springframework.web.bind.annotation.sessionattributes;  import org.apache.log4j.logger;  @controller public class logincontroller {       private static final logger logger  = logger.getlogger(logincontroller.class);      @requestmapping({"/","home"})     public string home(modelmap model,httpsession session,httpservletrequest request) {          // stuff          return "login";     }     @requestmapping(value = "/login", method = requestmethod.get)     public string login_get(){         logger.debug("started...");         return "forward:home";     }      @requestmapping(value = "/login", method = requestmethod.post)     public string login(@modelattribute("laph") laph laph,                          bindingresult bindingresult,                         modelmap model,                          httpsession session,                         httpservletrequest request,                          httpservletresponse response,                         @requestparam(required=true) string last_usertype) {          if (bindingresult.haserrors()) {             logger.debug("error returning home");             return "home";         }          logger.debug("started ....");            // authentication             if (!isauthenticated) {             model.put("status_message", error_message);                    return "login";         }          // success, send newly authenticated user search page         nextview = "search";         return "redirect:" + nextview;     }  }// end class logincontroller 

my logs show not reaching controller method handling requests /login, i'm still getting error messages not supported /login.

any ideas on how can fix this?

thanks

steve

i concerned users bookmarking https:// blah.blah.blah/acme/login, , getting error message of "get request not supported".

your method signatures correct; annotations have placed on login_get , login, spring not confused , invoke correct methods , post requests.

your method home wrong; returns string "login", guess not have view named login , invoke 1 of login methods. in case should have returned "forward:login", solution not better.

my advice is:

  1. /home should render home view, using file home.jsp or whatever view technology you're using.
  2. use handlerinterceptor check whether user logged in, , if not, redirect him login url.

Comments

Popular posts from this blog

c# - SVN Error : "svnadmin: E205000: Too many arguments" -

c++ - Using OpenSSL in a multi-threaded application -

All overlapping substrings matching a java regex -