我试图建立我的网站,以允许位置添加到urls。例如: 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变量,但是如何在更多的请求中持久化这些urls呢?
现在举个例子,我有一个测试错误页面:
@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“并不是给我所需要的最好的方法,因为”位置“可以应用到相当广泛的主题中。我已经找到了我正在寻找的地方,但我似乎无法确定最后几步。
如有任何帮助/建议/建议,我们将不胜感激。如果需要升级版本,我不确定这在目前是否可行,我将不得不研究它。最好我希望解决方案能够在我正在运行的当前春季版本上完成。
发布于 2020-04-15 14:53:06
这里最好的方法是:
@RequestMapping("/some/{foo}/{baz}")
public String hi(CompositeObject compositeObject) {
return "hi";
}
@Data
public class CompositeObject {
private String foo;
private String baz;
}Spring为请求路径和请求参数提供了将其收集到复合对象中的功能。它既不适用于主体,也不适用于头。
如果您有一些可选的状态,那么只需在控制器上保持它为空,稍后处理即可。
https://stackoverflow.com/questions/61231444
复制相似问题