如何在 Spring mvc 中的控制器中设置默认处理程序方法?

How to set default handler method in controller in Spring mvc?

我正在开发 Spring mvc 应用程序,我必须在其中显示位置列表。我有一个位置控制器方法。以下是我的控制器方法代码:

@RequestMapping("/location")
public class LocationController {
    @RequestMapping(value = "/home")
    public String showAllLocations(ModelMap modelMap) {
        logger.info("showAllLocations() begins:");
        try {
            List<LocationModel> locationList = locationService
                    .getAllLocations("");
            modelMap.addAttribute("locationlist", locationList);
        } catch (Exception e) {
            logger.debug("Error while getting locations: " + e.getMessage());
            e.printStackTrace();
        }
        return "LocationHome";
    }
}

当我关注 URL:

时它工作正常

http://www.example.com:8080/myapp/location/home

但是当我使用http://www.example.com:8080/myapp/location时,它显示错误。

如何在不使用 'home' 的情况下查看位置列表,方法是 URL:

http://www.example.com:8080/myapp/location

@RequestMapping(value = "/home")
public String doHome(ModelMap modelMap) {
   ...
}

@RequestMapping(value = "/**")
public String doDefault(ModelMap modelMap) {
   ...
}

确保将更具体的请求处理程序放在不太具体的请求处理程序之前。

@RequestMapping(value = "/", method = { RequestMethod.GET, RequestMethod.POST }) 这可以将您映射到默认处理程序。

您在这里有 LocationController 的请求映射,

            @RequestMapping("/location")
            public class LocationController {..}

因此,此控制器拦截的​​所有 URL 都应具有模式 /location,后跟方法请求映射,如此处,

        @RequestMapping(value = "/home")
        public String showAllLocations(ModelMap modelMap) {..}

如果你需要为 http://www.example.com:8080/myapp/location 拦截 request 。只需从控制器中删除 url 映射并将其分配给方法即可。