Контроллер Rest возвращает 404 по базовому пути

#java #spring-boot #spring-mvc #spring-restcontroller

#java #весенняя загрузка #spring-mvc #spring-restcontroller

Вопрос:

Я пытаюсь создать REST API с помощью Spring Boot. Когда я делаю «http://localhost:8080/foo /*», я получаю то, что хочу, но когда я использую «http://localhost:8080/api/foo /*», я получаю ошибку 404. У меня есть другие контроллеры, которые почти такие же, и они работают просто отлично. Я пробовал использовать @RequestMapping, но ничего не изменилось. application.properties:

 .
.
spring.data.rest.base-path=/api
 

Контроллер:

 @RestController
public class FooController {
    @Autowired
    private FooRepository fooRepository;
    
    @GetMapping("/foo")
    public List<Foo> retreiveAllFoos(){
        return fooRepository.findAll();
    }
    
    @GetMapping("/foo/{id}")
    public Foo retrieveFoo(@PathVariable int id) {
        Optional<Foo> foo = fooRepository.findById(id);
        return foo.get();
    }
    
    @DeleteMapping("/foo/{id}")
    public void deleteFoo(@PathVariable int id) {
        fooRepository.deleteById(id);
    }
    
    @PostMapping("/foo")
    public ResponseEntity<Object> createFoo(@RequestBody Foo foo){
        Foo savedFoo = fooRepository.save(foo);
        
        
        URI location = ServletUriComponentsBuilder.fromCurrentRequest().path("/{id}")
                .buildAndExpand(savedFoo.getId()).toUri();
        return ResponseEntity.created(location).build();
    }
    
    @PutMapping("/foo/{id}")
    public ResponseEntity<Object> updateFoo(@RequestBody Foo foo, @PathVariable int id){
        Optional<Foo> fooOptional = fooRepository.findById(id);
        
        if(!fooOptional.isPresent()) {
            return ResponseEntity.notFound().build();
        }
        
        foo.setId(id);
        
        fooRepository.save(foo);
        
        return ResponseEntity.noContent().build();
    }
}
 

Ответ №1:

Правильное свойство spring.data.rest.basePath таково, что вы хотите, чтобы в application.properties :

 spring.data.rest.basePath=/api
 

См . https://docs.spring.io/spring-data/rest/docs/current/reference/html/#getting-started.changing-base-uri

Комментарии:

1. Я изменил, но проблема все еще сохраняется.

2. Какую версию Spring Boot вы используете?

3. Я использую версию 2.4.1.

Ответ №2:

В application.properties том числе следующее:

 server.servlet.context-path=/api
 

Однако это сделает его по умолчанию корневым для всех конечных точек в вашем приложении

Кроме того, после включения @RequestMapping аннотации вы устанавливаете это для всего контроллера или заголовка каждого метода?