java 调用上下文根中不带斜杠的控制器方法

yvt65v4c  于 2023-02-14  发布在  Java
关注(0)|答案(1)|浏览(137)

我尝试用Spring Boot创建一个API。Spring Boot的版本如下

spring-boot 1.5.13.RELEASE
spring-core 4.3.17.RELEASE

上下文根被设置为"/hoge "和" www.example.com ",application.properties",

server.context-path=/hoge

和控制器方法如下

@RequestMapping(value = "/")
public String default(
                HttpServletRequest request,
                HttpServletResponse response,
                SessionStatus sStatus,
                Model model, Locale locale) throws IOException, Exception {
        return login(request, response, sStatus, model, locale);
}

下面的代码是在curl中执行的,并且执行了方法。

curl http://localhost:8080/hoge/

但是,如果下面没有尾随斜杠,则该方法不会执行。

curl http://localhost:8080/hoge

当方法的RequestMapping注解中的值为

@RequestMapping(value = {"","/"})

我想知道如何执行一个方法的请求没有尾随斜线。
先谢谢你。
附录
ex1(无法执行。)

@Controller
@RequestMapping(value = "")
public class TestAction {

     public String default(
             HttpServletRequest request,
             HttpServletResponse response,
             SessionStatus sStatus,
             Model model, Locale locale) throws IOException, Exception {
         return login(request, resonse, sStatus, model, locale);
     }
}

ex2(无法执行。)

@Controller
@RequestMapping(value = "*")
public class TestAction {

     public String default(
             HttpServletRequest request,
             HttpServletResponse response,
             SessionStatus sStatus,
             Model model, Locale locale) throws IOException, Exception {
         return login(request, resonse, sStatus, model, locale);
     }
}

ex3(无法执行。)

@Controller
public class TestAction {
     @RequestMapping(value = "")
     public String default(
             HttpServletRequest request,
             HttpServletResponse response,
             SessionStatus sStatus,
             Model model, Locale locale) throws IOException, Exception {
         return login(request, resonse, sStatus, model, locale);
     }
}

ex4(无法执行。)

@Controller
public class TestAction {
     @RequestMapping(value = "*")
     public String default(
             HttpServletRequest request,
             HttpServletResponse response,
             SessionStatus sStatus,
             Model model, Locale locale) throws IOException, Exception {
         return login(request, resonse, sStatus, model, locale);
     }
}
xzv2uavs

xzv2uavs1#

server.context-path=/hoge只是上下文路径。那不是资源。你的资源现在被设置为“/“(检查请求Map)。你还没有为你的资源设置一个正确的名称。
要解决这个问题,您必须使用类似下面的名称来命名您的请求Map。

@RequestMapping(value = "/default")

我在这里选择了“默认值”作为名称。您可以随意命名,只要符合标准即可。
这就是请求的样子。

curl http://localhost:8080/hoge/default

如果你不希望上下文为hoge,那么删除server.context-path属性,你的请求将如下所示。

curl http://localhost:8080/default

如果您创建了另一个资源,您可以将其请求Map设置为类似于下面的内容,并使用不同的名称。

@RequestMapping(value = "/default-new")

会导致这样的请求。

curl http://localhost:8080/default-new

相关问题