Spring 启动 - 请求映射不接受尾部斜杠或多个目录



当我的控制器中使用RequestMapping时,我可以将一个html文件映射到"/",将另一个映射到"/users"。但是,尝试映射到"/users/"或"/users/test"将不起作用。在控制台中,它会说端点已映射,但在尝试访问它时,我将收到 404 错误页面。

package com.bridge.Bitter.controllers;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class BitterController {
//works
@RequestMapping(value="/")
public String getMainPage(){
return "main.html";
}
//works
@RequestMapping(value="/users")
public String getUsersPage(){
return "users.html";
}
//doesn't work, Whitelabel error page
@RequestMapping(value="/users/")
public String getUsersSlashPage(){
return "users.html";
}
//doesn't work, Whitelabel error page
@RequestMapping(value="/users/test")
public String getUsersTestPage(){
return "users.html";
}
}

我的应用程序属性只包含"spring.data.rest.basePath=/api"。

如果我从@Controller更改为@Rest控制器,将发生以下情况:

package com.bridge.Bitter.controllers;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
@RestController
public class BitterController {
//works
@RequestMapping(value="/")
public String getMainPage(){
return "main.html";
}
//returns a webpage with the text "users.html" on it instead of serving the html
@RequestMapping(value="/users")
public String getUsersPage(){
return "users.html";
}
//returns a webpage with the text "users.html" on it instead of serving the html
@RequestMapping(value="/users/")
public String getUsersSlashPage(){
return "users.html";
}
//returns a webpage with the text "users.html" on it instead of serving the html
@RequestMapping(value="/users/test")
public String getUsersTestPage(){
return "users.html";
}
}

将函数从返回字符串更改为返回

new ModelAndView("user.html")

适用于/users,但随后/users/和/users/test 会出现 404 错误。

您正在尝试映射同一路径两次。/users 的处理方式与/users/相同,因此 Spring 无法解析哪个控制器方法应该处理请求。

你可以试试这个:

package com.bridge.Bitter.controllers;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class BitterController {
@RequestMapping("/")
public String getMainPage(){
return "main.html";
}
@RequestMapping("/users")
public String getUsersPage(){
return "users.html";
}
@RequestMapping("/users/test")
public String getUsersTestPage(){
return "users.html";
}
}

另一方面,当您使用@RestController注释时,您总是以 JSON 格式返回响应文本,这就是您始终获得相同结果的原因。

最新更新