Как настроить весеннюю загрузку для выдачи ошибки 404, если маршрут не существует? - PullRequest
0 голосов
/ 08 октября 2019

Итак, у меня есть куча вложенных маршрутов в контроллере. Я хочу убедиться, что приложение выдает ошибку, если конкретный вложенный маршрут не существует. Прямо сейчас, если вложенный уровень больше 2, приложение возвращает null вместо того, чтобы выдать ошибку, сообщающую, что маршрут не может быть найден.

Пример:

@RestController 
@RequestMapping(value="v1/")
public class EmployeeController {

    @Autowired
    EmployeeRepository employeeRepository;


    // Get Token Info
    @RequestMapping(value = "read/tokenInfo", method =  RequestMethod.GET)
    public Token getTokenInfo(@AuthenticationPrincipal Token token) {
        return token;
    }


    // List of all employees.
    @GetMapping(path = "read/list")
    public List<Employee> getAllEmployees() {
        return employeeRepository.findAll();
    }

В приведенном выше коде, скажем, для маршрута v1/read/tokenInfo имеет 3 сегмента - v1, читатьи tokenInfo. Если бы я набрал неверный маршрут и попробовал что-то вроде - v1/read/tokeninfosss вместо того, чтобы показать ошибку, он возвращает 200OK с сообщением null.

ответ: response

Однако, если на маршруте было только 2 уровня - следующим образом -

@RestController 
@RequestMapping(value="v1/")
public class EmployeeController {

    @Autowired
    EmployeeRepository employeeRepository;

    // Get Token Info
    @RequestMapping(value = "tokenInfo", method =  RequestMethod.GET)
    public Token getTokenInfo(@AuthenticationPrincipal Token token) {
        return token;
    }

А теперь, если я позвоню - v1/tokenInfosss, выдает ошибку - 404 ошибка: 404 error

Я также настроил безопасность следующим образом -

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.sessionManagement()
        .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
        .and()
        .authorizeRequests()    
        .antMatchers("/local/**").permitAll()
        .antMatchers("/v1/read/**").hasAuthority("Display")
        .antMatchers("/v1/modify/**").hasAuthority("Update")
        .anyRequest().authenticated()
        .and()
        .oauth2ResourceServer()
        .jwt()
        .jwtAuthenticationConverter(getJwtAuthenticationConverter());
}

Любая идея, какнастроить эту ошибку 404?

Ответы [ 2 ]

1 голос
/ 08 октября 2019

попробуйте завершить ваш путь с / и удалите / из v1
@RequestMapping(value="v1")

и

@RequestMapping(value="/read/tokenInfo/", method = RequestMethod.GET)

0 голосов
/ 08 октября 2019

Spring сделает это автоматически. Если у вас нет правильной аннотации сопоставления запроса, spring вернется с 404. Проблема в том, что в вашем сопоставлении запроса. Когда вы задаете @RequestMapping(value = "read/tokenInfo", method = RequestMethod.GET) таким образом, он будет принимать любой запрос, например read/tokenInfossesf, из-за вашего пути.

По умолчанию Spring MVC выполняет сопоставление с суффиксом. *, Чтобы контроллер отображался на/ person также неявно отображается на /person.*.

Пожалуйста, проверьте также пружинную документацию для аннотации сопоставления запроса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...