【问题标题】:How to map Request parameter in Spring?如何在 Spring 中映射请求参数?
【发布时间】:2013-03-22 17:13:22
【问题描述】:

我正在使用 Spring MVC。用户注册后,将向用户帐户发送一封电子邮件。

这很好..我还将加密的用户 ID 发送到用户电子邮件中,为此我编写了一个模板..

<bean id="activateAccountTemplate" class="org.springframework.mail.SimpleMailMessage">
    <property name="subject" value="Account activation" />
    <property name="text">
        <value>
        <![CDATA[
            <html><body><p>Dear %s</p><p>Click <a href="http://localhost:8080/EClass/home?a=%s">here</a> to activate your account.</p></body></html>
        ]]>
        </value>
    </property>
</bean>

当用户收到电子邮件并点击激活时... URL 是这样的..

http://localhost:8080/EClass/home?a=tdpTA3Dz8DYSI+9F/DpMxmxGD/a1Kl+3oYqXc1NNH0U=

我想得到这个加密的用户 ID,为此我正在编写方法..

    @Controller
public class HomeController {

    @RequestMapping(value="home", method=RequestMethod.GET)
    public String home(Model model) throws Exception {
        model.addAttribute(FormType.LOGIN.name(), FormType.LOGIN.getNewInstance());
        model.addAttribute(FormType.SIGNUP.name(), FormType.SIGNUP.getNewInstance());
        return "home";
    }

    @RequestMapping(value="active", method=RequestMethod.GET)
    public String active(@RequestParam("a") String activeCode) throws Exception {

        String userid = CryptUtil.decrypt(activeCode);
        System.out.println("User id Displayed ===="+userid);
        return "home";
    }   
}

但是服务器控制台上什么也没发生... 基本上我想获取用户ID并使用用户ID更新用户列Activate=Yes..

请给我建议..

【问题讨论】:

    标签: java spring spring-mvc spring-security


    【解决方案1】:

    http://localhost:8080/EClass/home 基本上会以 a 作为参数调用您的控制器方法:

    @RequestMapping(value="/home", method=RequestMethod.GET)
        public String home(Model model) throws Exception {
    }
    

    但基本上你想打电话的问题

     @RequestMapping(value="/active", method=RequestMethod.GET)
        public String active(@RequestParam("a") String activeCode) throws Exception {
    }
    

    所以把你的请求改成

    <html><body><p>Dear %s</p><p>Click <a href="http://localhost:8080/EClass/active?a=%s">here</a>
    

    还要在请求映射的 value 属性中指定一个/

    【讨论】:

    • 异常即将到来:java.lang.IllegalStateException:Bean 名称“LOGIN”的 BindingResult 和普通目标对象都不能用作 org.springframework.web.servlet.support.BindStatus 的请求属性。( BindStatus.java:141)
    • @NarasimhamK 您正在尝试在 JSP 中使用 Login 属性而不在控制器类中设置登录属性在 home () 方法中设置,而不是在 active() 方法中,因此请更改您的代码相应地。
    • @NarasimhamK 在您的公共 String home() 方法中设置 model.addAttribute(FormType.LOGIN.name(), FormType.LOGIN.getNewInstance());所以我假设您正在尝试在 JSP 中的某处使用该属性,但现在您已将请求映射更改为操作,该方法不包含此属性,但我认为您仍在尝试在 JSP 中访问它。
    • @Lakshmi .. 谢谢您的回复... 问题解决了.. 我忘记了返回语句中的斜杠(/)......即,返回“/home”
    【解决方案2】:

    您需要将 RequestMapping 映射到“home”:

    @RequestMapping(value="/home", method=RequestMethod.GET)
    

    【讨论】:

    【解决方案3】:

    您的请求映射中缺少斜线 /。在控制器类级别在方法级别添加/。但不是两者都有..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-04
      • 1970-01-01
      • 2023-03-09
      • 2018-11-12
      • 2019-11-25
      相关资源
      最近更新 更多