微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – Spring @RequestParam和req.getParameter(“xx”)的工作方式不同吗?

请理解我的英语不好.

我使用Spring MVC并替换了这个源代码

@RequestMapping("/ajax/add_server")
public void addServer(HttpServletRequest request, HttpServletResponse response) throws Exception {
    String host = request.getParameter("host");
    String port = request.getParameter("port");
    String state = request.getParameter("state");

    serverService.addServer(host, port, state);
}

@RequestMapping("/ajax/add_server")
public void addServer(
        @RequestParam("host") String host,
        @RequestParam("port") String port,
        @RequestParam("state") String state) throws Exception {

    serverService.addServer(host, port, state);

}

addServer()方法由AJAX调用.

在使用req.getParameter()的情况下,我的ajax加载图像消失了,但是当我使用@RequestParam时图像没有消失.

我猜Ajax XMLRequest Object没有获得任何成功的MSG.

但我不知道为什么,这是正常的吗?

额外发现!!

@RequestMapping("/ajax/add_server")
    public void addServer(
            @RequestParam("host") String host,
            @RequestParam("port") String port,
            @RequestParam("state") String state,
            HttpServletResponse response) throws Exception {

        serverService.addServer(host, port, state);
    }

添加了对Parameter的响应,然后图像消失了.我不知道为什么.

我留下这个作为参考.

具有void返回类型的Controller方法使用基于URI的VIEW.

例如,以下源使用ajax / add_server.jsp作为视图.

@RequestMapping("/ajax/add_server")
    public void addServer(
            @RequestParam("host") String host,
            @RequestParam("port") String port,
            @RequestParam("state") String state) throws Exception {

        serverService.addServer(host, port, state);
    }

解决方法:

@RequestParam的认值是该值是必需的,如果没有,它将抛出异常.另一方面,使用getParameter,它只是将null传递给下一个方法.因此,如果有时您没有提供所有三个参数,那么它将无法正常进行更改.

编辑:

关于您发布的其他信息:
AnnotationMethodHandlerAdapter中有一些特殊处理,当void方法将HttpServletResponse作为参数接收时,它会更改路由.基本上它假设自从您接收响应后,您正在处理需要生成的任何输出并禁用认视图分辨率.这将导致服务器简单地使用空响应主体回复200.

如果您有一个void方法,但没有在HttpResponse对象中读取,则它将恢复为认视图分辨率.这可能导致生成错误,因为我怀疑你有一个名为add_server的.jsp文件! :)请求sill“工作”,因为您的服务调用已完成并在方法返回并且Spring尝试查看解析之前已提交. ajax调用最终会转到错误处理程序而不是成功处理程序.

tl;博士有时注释控制器“魔法”有点太神奇了:)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐