【问题标题】:Spring params is not working弹簧参数不起作用
【发布时间】:2013-03-14 09:21:03
【问题描述】:

使用 spring params 的注释不起作用。

@RequestMapping(value = "/login", method = RequestMethod.PUT)
public @ResponseBody ResponseMsg login(@RequestParam String userName, @RequestParam String password ) 
{
    ResponseMsg responseMsg = CommonUtils.checkParam(userName, password);

    if(responseMsg.getStatus().equalsIgnoreCase("True"))
    {
        responseMsg =  userService.login(userName, password);
    }
    return responseMsg;
}

我正在使用此函数获取 put 中的值,但它显示 400 Bad Request。有什么帮助吗?

【问题讨论】:

  • 能否贴出调用该方法的链接/javascript?
  • localhost:8080/karmaFriend/login 之后我将数据放入标题中,例如用户名:kkk 密码:kkk
  • 您在测试时是否真的在执行 HTTP PUT,而不仅仅是尝试使用浏览器访问 URI?
  • 在浏览器中输入什么来调用这个控制器?还要仔细检查请求方法是否带有 PUT 选项或 POST 选项?
  • 好的,我知道原因了,你应该把参数名改成用户名和密码或者按照我的回答。

标签: java spring-mvc annotations http-request-parameters


【解决方案1】:

正确的答案是这个……感谢 OQJF

@RequestMapping(value = "/login", method = RequestMethod.GET)
    public @ResponseBody ResponseMsg login(@RequestHeader(value="username", required=false) String userName, 
            @RequestHeader(value="password", required=false) String password ) {

        ResponseMsg responseMsg = CommonUtils.checkParam(userName, password);
        if(responseMsg.getStatus().equalsIgnoreCase("True"))
            responseMsg =  userService.login(userName, password);
        return responseMsg;
    }

【讨论】:

    【解决方案2】:

    首先使用 firebug 查看您发送给控制器的参数。如果参数名称正确。我认为原因是@RequestParam注释的字段默认是必需的,这意味着从客户端发送的参数必须包含它们,即userName和passWord,更改为:@RequestParam(value="username" required=false) String userName, @RequestParam(value="password" required=false) String password并尝试一下。

    【讨论】:

    • 但重要的是我使用了@RequestParam 我使用@RequestHeader 解决了它
    • 哈哈,伙计。原因不是你使用了哪个注解,而是你没有指定注解的值,你使用的1个字段名称是userName,那么默认情况下,Spring会尝试查找名称为userName的参数,但是你的参数名称是用户名,找不到。
    【解决方案3】:

    我不确定你想在这种情况下使用帖子。但您可以尝试按如下方式访问标头参数:

    @RequestMapping(value = "/login", method = RequestMethod.PUT)
    public @ResponseBody ResponseMsg login(@RequestHeader("username") String userName, @RequestHeader("password") String password ) {
                    ResponseMsg responseMsg = CommonUtils.checkParam(userName, password);
                    if(responseMsg.getStatus().equalsIgnoreCase("True"))
                        responseMsg =  userService.login(userName, password);
                    return responseMsg;
                }
    

    【讨论】:

    • @krishan 但在上面的帖子中你提到你用@RequestHeader解决了它
    猜你喜欢
    • 2013-11-29
    • 1970-01-01
    • 2011-01-02
    • 2011-06-22
    • 2013-05-05
    • 2014-02-15
    • 1970-01-01
    相关资源
    最近更新 更多