1

我有一个多动作控制器来处理所有相关请求。我创建了一个处理 ajax 请求的方法,并且该方法预计将返回一个字符串值作为响应。这个 Spring 应用程序不是“mvc:annotation-driven”。

具有处理 ajax 调用方法的控制器:

public class UserController extends MultiActionController { 

    private UserDelegate userDelegate;

    public void setUserDelegate(UserDelegate userDelegate) {
        this.userDelegate = userDelegate;
    }

    public String AjaxExample(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
        String ip = request.getParameter("ip"));
        String sysName = userDelegate.getSysName(ip);
        return sysName;
    }

    //Several methods to handle other requests ...
}

使用 jquery 我能够成功调用上面的“AjaxExample”方法。jquery函数如下图所示:

function callAjax() {
                        var ip = $('#ip').val();
                        $.ajax(
                            {
                                type: "POST",
                                url: "AjaxExample.do",
                                data: "ip=" + ip,
                                success: function(response) {
                                    alert(response);
                                },
                                error: function(e) {
                                    alert('Error: ' + e);
                                }
                            }
                        );
                    }

我面临的问题是如何在不使用 @ResponseBody 注释的情况下返回字符串?

我可以只在这一种方法上使用注释吗?老实说,我实际上是通过<mvc:annotation-driven/>在我的应用程序配置文件中设置标签并使用@ResponseBody 注释“AjaxExample”方法来尝试的。那没有用,spring 仍然将字符串识别为未解决的视图。

我从来没有使用注释配置过spring,我对此的理解是有限的。@ResponseBody 注释不起作用是因为我没有用@Controller 注释我的控制器并且因为我没有用@Request 注释方法吗?但是我在我的应用程序配置文件中确实有一个 bean 定义,并且控制器中的其他方法工作正常。

请忍受我的无知,并启发我如何让这个方法将字符串返回给我的 ajax 调用?

4

1 回答 1

2

将返回类型更改为 void 然后将响应直接写入HttpServletResponse.

public void AjaxExample(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
        String ip = request.getParameter("ip"));
        字符串系统名称;
        PrintStream printStream = new PrintStream(out);
        尝试 {
           out.print(sysName);
        } 捕捉(IOException e){}
}
于 2013-04-12T03:22:50.280 回答