url中的春季启动位置变量



我正在尝试设置我的网站,以允许在URL中添加位置。电子邮箱:mysite.com/us/ca/sanfrancisco/home同时仍然允许mysite.com/home和介于两者之间的一切。

Spring引导父级,这样你就知道我使用的是什么版本的Spring:

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
</parent>

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

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

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

@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/sanfranciscovs/anything/anything

如果我需要/州/市/市/实际目标,我可以和最后一个住在一起至于验证我们是否支持给定的位置,我知道这是我的职责,我可能只需要一个小数据库来跟踪我们对给定变量的支持和不支持。

有建立这个系统的最佳实践吗?我试着在这方面找到一些东西,但在谷歌上搜索"spring boot location url"并不是最好的方法,因为"location"可以应用于相当广泛的主题。我已经到了我要搜索的地方,但我似乎无法确定最后几步。

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

这里最好的方法是:

@RequestMapping("/some/{foo}/{baz}")
public String hi(CompositeObject compositeObject) {
return "hi";
}
@Data
public class CompositeObject {
private String foo;
private String baz;
}

Spring提供了请求路径和请求参数的功能,以便将其收集到一个复合对象中。它既不适用于正文,也不适用于页眉。

如果你有一些可选的东西,比如状态,那么在控制器上保持它为空,然后再处理

最新更新