#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
Комментарии:
1. Я изменил, но проблема все еще сохраняется.
2. Какую версию Spring Boot вы используете?
3. Я использую версию 2.4.1.
Ответ №2:
В application.properties
том числе следующее:
server.servlet.context-path=/api
Однако это сделает его по умолчанию корневым для всех конечных точек в вашем приложении
Кроме того, после включения @RequestMapping
аннотации вы устанавливаете это для всего контроллера или заголовка каждого метода?