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

标签 java ajax spring

请理解我的英语不好。

我使用 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 对象没有得到任何成功的 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);
    }

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

我把这个留作引用。

返回类型为 void 的 Controller 方法使用基于 URI 的 View 。

例如,以下源使用 ajax/add_server.jsp 作为 View 。

@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 传递给下一个方法。因此,如果有时您没有提供所有三个参数,那么更改将无法正常工作。

编辑:

关于您发布的附加信息: 当 void 方法将 HttpServletResponse 作为参数时,AnnotationMethodHandlerAdapter 内部有一些特殊处理会更改路由。基本上它假定,由于您接受了响应,因此您正在处理需要生成的任何输出,并且它会禁用默认 View 分辨率。这将导致服务器简单地回复 200 和一个空的响应主体。

如果您有一个 void 方法,但没有读取 HttpResponse 对象,它将恢复为默认 View 分辨率。这可能导致生成错误,因为我怀疑您在任何地方都有一个名为 add_server 的 .jsp 文件! :) 由于您的服务调用在方法返回和 Spring 尝试查看解析之前完成并提交,因此请求仍然“有效”。 ajax 调用最终转到错误处理程序而不是成功处理程序。

tl;dr 有时带注释的 Controller “魔法”有点太神奇了:)

关于java - Spring @RequestParam 和 req.getParameter ("xx") 的工作方式不同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10327636/

相关文章:

java - 如何从集合中获取最大值(例如 ArrayList)?

javascript - EmberJS $.ajax 记录获取为 setupController 中的模型返回未定义

Spring MVC : Redirecting from a base controller - How to get the path to redirect to?

java - 如何使用 Jquery 向 spring mvc 应用程序发送 POST 请求

java - acegi 安全 - targetURL 保持 "#xxx"

java - Android 从文本文件中获取图像路径

java - 打印出列表中最长的回文

Java POS 打印机错误

jQuery/AJAX 自动完成,每个 session 仅查询 MySQL 表一次

javascript - Ajax新请求报错Uncaught TypeError : send is not a function