首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >urls中的Spring-启动位置变量

urls中的Spring-启动位置变量
EN

Stack Overflow用户
提问于 2020-04-15 14:36:02
回答 1查看 99关注 0票数 0

我试图建立我的网站,以允许位置添加到urls。例如: mysite.com/us/ca/sanfrancisco/home,同时也允许mysite.com/home和两者之间的一切。

Spring引导父程序,因此您知道我使用的spring版本:

代码语言:javascript
运行
复制
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.6.RELEASE</version>
</parent>

如果您需要另一个版本控制,请告诉我。

我知道我可以在请求映射中添加regex变量,但是如何在更多的请求中持久化这些urls呢?

现在举个例子,我有一个测试错误页面:

代码语言:javascript
运行
复制
    @RequestMapping({"/error/501", "/{state:[a-z]{2}}/error/501", "/{state:[a-z]{2}}/{city:[a-z]+}/error/501"})
    public ModelAndView testingLocations(ModelMap model, @PathVariable(value="state", required = false) String state,
                                         @PathVariable(value="city", required=false) String city){
        getLogger().info("State: {}", state);
        model.addAttribute("stateTest",state+":"+city);
        model.addAttribute("view", "error");
        return new ModelAndView("error/501", model);
    }

但是,当我在我的测试页面,我点击主页按钮,它会带我回到mysite.com/home

所以我的问题

有什么办法让我坚持下去,以便如果他们目前在一个基于位置的url,它将应用到未来的导航基础?(除非他们手动输入url以不包括它们)

那么,作为后续,是否有一种方法可以全局应用这些请求变量,而不需要我将@PathVariable添加到每个请求映射方法中?我知道我只需要将请求映射变量字符串本身添加到控制器类中,这样我就不需要在每个方法上都这样做了。但是,有什么方法可以让我不用@PathVariable注解来利用这些注释呢?

最后,是否有一种方法可以使它不再像硬编码的那样,比如我可以说/{*location}/error,以尽可能深入地覆盖这些位置?在对位置格式进行验证的同时,验证1我们支持给定的位置,2格式是正确的(/ca/sanfrancisco vs / the / the / the )

最后一个我能接受的,如果我需要有/state/市/市/实际目标,直到验证我们支持给定的位置,我知道这是在我的一端,我可能只有一个小的数据库来跟踪我们做什么,并且不支持给定的变量。

是否有建立这一系统的最佳做法?我试着在这上面找到一些东西,但是谷歌搜索"spring url“并不是给我所需要的最好的方法,因为”位置“可以应用到相当广泛的主题中。我已经找到了我正在寻找的地方,但我似乎无法确定最后几步。

如有任何帮助/建议/建议,我们将不胜感激。如果需要升级版本,我不确定这在目前是否可行,我将不得不研究它。最好我希望解决方案能够在我正在运行的当前春季版本上完成。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-15 14:53:06

这里最好的方法是:

代码语言:javascript
运行
复制
@RequestMapping("/some/{foo}/{baz}")
public String hi(CompositeObject compositeObject) {
   return "hi";
}

@Data
public class CompositeObject {
    private String foo;
    private String baz;
}

Spring为请求路径和请求参数提供了将其收集到复合对象中的功能。它既不适用于主体,也不适用于头。

如果您有一些可选的状态,那么只需在控制器上保持它为空,稍后处理即可。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61231444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档