当前位置: 首页 > 面试题库 >

向前添加参数?

长孙修远
2023-03-14
问题内容

是否可以在向其添加一些参数数据的同时将请求转发给另一个控制器?我尝试添加到ModelMap中,但是它似乎不存在问题。我正在做类似的事情:

return "forward:/my-other-controller";

我能想到的唯一其他方法是将参数放在会话上,然后将其弹出目标控制器。


问题答案:

最简单的方法是将数据添加到请求中。 由于这是转发,因此将相同的请求传递到服务器内的不同处理程序。

作为示例,让我们从两个控制器的简单设置开始,一个转发到另一个:

@Controller
public class TestController {
    @RequestMapping(value="/test")
    public String showTestPage() {
        return "forward:/test2";
    }
}

@Controller
public class TestController2 {
    @RequestMapping(value="/test2")
    public String showTestPage() {
        return "testPageView";
    }
}

添加数据的第一种方法是将其设置为请求的属性。新的控制器将如下所示( A ):

@Controller
public class TestController {
    @RequestMapping(value="/test")
    public String showTestPage(HttpServletRequest request) {
        request.setAttribute("param1", "foo");
        request.setAttribute("param2", "bar");
        return "forward:/test2";
    }
}

@Controller
public class TestController2 {
    @RequestMapping(value="/test2")
    public String showTestPage(HttpServletRequest request) {
        String param1 = (String) request.getAttribute("param1");
        String param2 = (String) request.getAttribute("param2");
        return "testPageView";
    }
}

由于前向前缀中的视图名称基本上是URL,因此您还可以具有以下版本(属性更改为参数)( B ):

@Controller
public class TestController {
    @RequestMapping(value="/test")
    public String showTestPage() {
        return "forward:/test2?param1=foo&param2=bar";
    }
}

@Controller
public class TestController2 {
    @RequestMapping(value="/test2")
    public String showTestPage(HttpServletRequest request) {
        String param1 = request.getParameter("param1");
        String param2 = request.getParameter("param2");
        return "testPageView";
    }
}

您还可以通过使用注释来进一步简化第二个控制器:

@Controller
public class TestController2 {
    @RequestMapping(value="/test2")
    public String showTestPage(@RequestParam String param1, @RequestParam String param2) {
        return "testPageView";
    }
}

只是为了好玩,并展示Spring的实际绑定行为,您甚至可以像这样( C )来做到这一点:

@Controller
public class TestController {
    @RequestMapping(value="/test")
    public String showTestPage() {
        return "forward:/test2?param1=foo&param2=bar";
    }
}

@Controller
public class TestController2 {
    @RequestMapping(value="/test2")
    public String showTestPage(@ModelAttribute DummyBinder params) {
        String param1 = params.getParam1();
        String param2 = params.getParam2();
        return "testPageView";
    }
}

class DummyBinder {
    private String param1;
    private String param2;

    public String getParam1() {
        return param1;
    }

    public void setParam1(String param1) {
        this.param1 = param1;
    }

    public String getParam2() {
        return param2;
    }

    public void setParam2(String param2) {
        this.param2 = param2;
    }
}

我个人会使用解决方案A的许多参数,而解决方案B的一些参数 解决方案C有点“呵……?!”
效果,因此我会避免使用它(它也可以与添加到URL的参数一起使用,因此其中一些参数会导致URL混乱)。

在会话中添加数据也可以正常进行,但是不必要地延长了数据的寿命,因此最好的方法是在过渡到第二个控制器期间将其添加到请求中。



 类似资料:
  • 首先,我不确定这是不是实现我想要的东西的正确方法..我正在尝试将如下所示的导出绑定添加到router . navigate()-方法: 问题是我从不使用该指令,而是通过路由器来处理: 我如何实现相同的导出绑定从第一个例子中的接受呼叫()-方法?我已经添加了一个输入()变量,并尝试使用queryParams,如下所示: 但这并不起作用。

  • 我目前正在创建一个ASP. NET应用程序,用户在使用Spotify Web API之前登录Spotify。 在调用API时,您指定response_type、client_id、作用域、redirect_uri和状态。当您调用时,它会将您重定向到redirect_uri,用户信息作为json中的参数,因为我想使用WPF网络浏览器,所以我必须将其添加到我的代码中,以允许IE查看JSON(此处有更多

  • 问题内容: 在使用AJAX调用的Web应用程序中,我需要提交一个请求,但要在URL的末尾添加一个参数, 寻找一种JavaScript函数,该函数解析URL并查看每个参数,然后添加新参数或更新值(如果已经存在)。 问题答案: 您需要调整的基本实现如下所示: 这大约是正则表达式或基于搜索的解决方案的两倍,但是这完全取决于查询字符串的长度和任何匹配项的索引 我为完成测试而基准的慢速正则表达式方法(慢了大

  • 我有一个基本的HTML网站,有几个谷歌地图在里面。每个子站点都有自己的地图。每个站点都有调用JS函数的代码: 这是JS函数:

  • 我想知道是否可以将spring的其他参数(如)添加到spring boot app中,以便将其作为服务运行。 我检查了由自动生成的脚本: 所以也许它可以通过maven插件的选项来完成,但是除了JVM参数之外找不到其他的,这不是那么有用...

  • 问题内容: 我有一种用于获取xml文件的数据获取方法。 我的问题是:如果文件名中存在ASCII范围之外的转义(十六进制表示法)或未转义utf-8字符,则jQuery会以某种方式向网址添加参数()。如果文件名中不包含该范围内的字符,则一切正常。 类型设置为,因此不应混淆类型。xml文件的标题也已适当设置。 我可以从控制台中看到jQuery引发错误,但是我不确定问题出在哪里。 可能是文件名格式出现问题