如果我没有使用注释但是如果我使用多重操作控制器,那么@ResponseBody的替代方法是什么?

时间:2013-04-12 00:31:10

标签: jquery spring-mvc

我有一个多操作控制器来处理所有相关的请求。我创建了一个处理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注释的情况下返回String?

我是否可以在这一种方法上使用注释? 说实话,我实际上是通过在我的应用程序配置文件中设置<mvc:annotation-driven/>标记并使用@ResponseBody注释'AjaxExample'方法来尝试的。这没用,春天仍然认为字符串是一个未解决的视图。

我从来没有使用注释配置弹簧,我对它的理解是有限的。 @ResponseBody注释不起作用,因为我没有使用@Controller注释我的控制器,因为我没有使用@Request注释该方法?但我在我的应用程序配置文件中有一个bean定义,控制器中的其余方法工作正常。

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

1 个答案:

答案 0 :(得分:2)

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

public void AjaxExample(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
        String ip = request.getParameter("ip"));
        String sysName;
        PrintStream printStream = new PrintStream(out);
        try {
           out.print(sysName);
        } catch (IOException e) {}
}