如何为特定URL创建控制器

时间:2018-04-04 14:29:36

标签: java spring spring-mvc thymeleaf

我需要从这个网址开始,http://localhost:8080/home/filter?projectId=1;fileId=1

我创建了这个控制器:

@GetMapping("/home/filter/{projectId}/{fileId}")
public String filter(@PathVariable("projectId") int projectId, @PathVariable("fileId") int fileId) {

    System.out.println("Project Id " + projectId);

    System.out.println("File Id " + fileId);

    return "redirect:/home";
}

当我测试时:http://localhost:8080/home/filter?projectId=1;fileId=1我发现了这个错误:

 This application has no explicit mapping for /error, so you are seeing this as a fallback.
 Wed Apr 04 17:24:51 EEST 2018
 There was an unexpected error (type=Not Found, status=404).
 /home/filter

我不知道该怎么做..

2 个答案:

答案 0 :(得分:3)

您需要了解网址中查询参数与路径参数之间的区别。

  • 查询参数是?之后的参数,形成为name=value(如果参数多于1,则由&分隔),
    比如http://localhost:8080/home/filter?projectId=1&fileId=1
  • 路径参数由/分隔(如果有,则在?之前),

    比如http://localhost:8080/home/filter/1/1

对于查询参数,您可以在控制器中使用@RequestParam注释 示例:适用于http://localhost:8080/home/filter?projectId=1&fileId=1等网址 您的控制器可能如下所示:

@GetMapping("/home/filter")
public String filter(@RequestParam("projectId") int projectId,  
                     @RequestParam("fileId") int fileId) {
    ...
}

对于路径参数,您可以在控制器中使用@PathVariable注释 示例:适用于http://localhost:8080/home/filter/1/1等网址 控制器可能如下所示:

@GetMapping("/home/filter/{projectId}/{fileId}")
public String filter(@PathVariable("projectId") int projectId,  
                     @PathVariable("fileId") int fileId) {
    ...
}

答案 1 :(得分:2)

TL; DR :只需拨打正确的网址:http://localhost:8080/home/filter/1/1

注意路径参数和查询参数之间的区别。

您的控制器映射使用路径参数,而您调用的URL使用查询参数