Клиент Spring MVC Rest получает исключение HttpClientErrorException: 404 null

Я настраиваю сервер отдыха вместе с клиентом, и уже несколько часов сталкиваюсь с проблемой. Когда я вызываю метод getPoints (), все работает нормально, но когда я вызываю getPoint (Long id), deletePoint (Long id) и postPoint (), я получаю: Exception in thread «main» org.springframework.web.client.HttpClientErrorException : 404 null.

Сторона клиента:

public List<Point> getPoints()
{
    RestTemplate restTemplate = new RestTemplate();
    ResponseEntity<List<Point>> pointResponse = restTemplate.exchange("http://localhost:5000/points", HttpMethod.GET, null,
            new ParameterizedTypeReference<List<Point>>()
            {});
    List<Point> points = pointResponse.getBody();
    return (points);
}

public Point getPoint(long id)
{
    RestTemplate restTemplate = new RestTemplate();
    Point point = restTemplate.getForObject("http://localhost:5000/points" + id, Point.class);
    return point;
}

public void postPoint()
{
    RestTemplate restTemplate = new RestTemplate();
    restTemplate.postForObject("http://localhost:5000/points", this, this.getClass());
}

public void deletePoint(Long id)
{
    RestTemplate restTemplate = new RestTemplate();
    restTemplate.delete("http://localhost:5000/points" + id);
}

На стороне сервера:

public class PointsController {

private final PointsRepository repository;

PointsController(PointsRepository repository){
    this.repository=repository;
}

@GetMapping("/points/")
List<Points> all() {
    return repository.findAll();
}

@PostMapping("/points/")
Points newPoints(@RequestBody Points newPoints){
    return repository.save(newPoints);
}

@GetMapping(value = "/points/{id}/", produces = "application/json; charset=UTF-8")
Resource<Points> one(@PathVariable Long id) {
    Points point = repository.findById(id).orElseThrow(() -> new PointsNotFoundException(id));

    return new Resource<>(point,
            linkTo(methodOn(PointsController.class).one(id)).withSelfRel(),
            linkTo(methodOn(PointsController.class).all()).withRel("points"));
}

@DeleteMapping("/points/{id}/")
void deletePoints(@PathVariable Long id) {
    repository.deleteById(id);
}

}

Что может вызвать проблему? Когда я ввожу адрес браузера: http: // локальный: 5000 / очков / 1, я обычно получаю точку с идентификатором 1.

Я не хочу вдаваться в ответ, но не хватает ли вам завершающего /?

Stefan 06.01.2019 23:44

Спасибо, но это не решает проблему

Dariokoko 06.01.2019 23:47

Вы добавили / на стороне сервера вместо клиента? Посмотри мой ответ пожалуйста

Stefan 06.01.2019 23:48
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
586
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Строка, которую вы собираетесь использовать в своем методе getPost(), будет выглядеть так: http://localhost:5000/points1 вместо http://localhost:5000/points/1.

Просто добавьте /, и все будет хорошо.

Спасибо, что помогли с GetMapping и DeleteMapping, PostMapping все еще не работает, но это может быть проблема с моим кодом.

Dariokoko 07.01.2019 00:02

Я не уверен, но можете ли вы попробовать следующее:

public void postPoint()
{
  RestTemplate restTemplate = new RestTemplate();
  restTemplate.postForObject("http://localhost:5000/points/", this, this.getClass());
}

Потому что я видел отображение сообщений на стороне сервера: @PostMapping("/points/")

Другие вопросы по теме