Spring Boot - Запрос сопоставления не принимает косую черту или несколько каталогов - PullRequest
0 голосов
/ 03 июля 2018

Когда 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";
    }

}

Мои application.properties содержат только "spring.data.rest.basePath = / api".

Если я перехожу с @Controller на @Rest Controller, происходит следующее:

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, но затем выдает ошибку 404 для / users / и /users/test.

1 Ответ

0 голосов
/ 03 июля 2018

Вы пытаетесь отобразить один и тот же путь дважды. / 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, поэтому вы всегда получаете один и тот же результат.

...