Не могу понять, почему RepositoryRestController не работает?

Я использую Spring Data Rest и не могу понять, почему мой RepositoryRestController не работает. Его код:

  @RepositoryRestController
  public class Cntrl {
  @Autowired
  private UserDao userDao;


  @RequestMapping(name = "/users/{id}/nameOne",method = 
  RequestMethod.GET)
  @ResponseBody
  public PersistentEntityResource setNameOne(@PathVariable("id") Long id, PersistentEntityResourceAssembler persistentEntityResourceAssembler){
User user = userDao.findById(id).orElseThrow(()->{
throw new ServerException("Wrong id");
});

user.setLogin("One");
userDao.save(user);
return persistentEntityResourceAssembler.toFullResource(user);
 }
 }

И стартовый класс Spring Boot:

    @SpringBootApplication
    @EnableWebMvc
    @EnableScheduling
    @EnableJpaRepositories
    @EnableSpringDataWebSupport
    public class Application {
    public static void main(String[] args) throws Exception {
    SpringApplication.run(Application.class, args);
    }
    }

Когда я перехожу к базовому пути (localhost:8080/api), все в порядке, но когда я отправляю GET на запрос к localhost:8080/api/users/1/nameOne, я получаю пустой ответ, у меня нет других контроллеров, и у меня есть пользователь с id 1, так почему он не работает?

Есть информация в лог-файлах сервера?

Jens 14.04.2019 14:46

ничего, сервер не реагирует на запрос

gg ff 14.04.2019 15:45
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
614
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если localhost:8080/api является вашим корневым контекстом, то localhost:8080/api/users/1/nameOne должен быть URL-адресом, который вы используете для пользователя GET.

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

Это не работает, потому что структура URL, которую вы используете, уже имеет значение в контексте Spring Data Rest.

/{repository}/{id}/{column} URL-адрес обрабатывается методом RepositoryPropertyReferenceController.followPropertyReference.

/api/users/1/nameOne означает: получить столбец nameOne пользователя с идентификатором 1. Важное примечание: этот столбец должен ссылаться на другой @Entity. Это означает, что если у вас есть столбец String с именем «фамилия», и вы нажмете URL-адрес /api/users/1/name, вы получите 404, потому что этот столбец не ссылается на другой объект. Если у вас есть столбец с именем школа, который ссылается на объект School, и вы нажмете URL-адрес /api/users/1/school, вы получите указанный объект школы для этого пользователя. Если у пользователя нет школы, вы снова получите 404.

Кроме того, @RepositoryRestController можно использовать для @RequestMapping, если указанный вами URL-адрес не конфликтует с Spring Data Rest.

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

@RepositoryRestController
public class CustomRepositoryRestController {
    @RequestMapping(path = "/repositoryRestControllerTest", method = RequestMethod.GET)
    @ResponseBody
    public String nameOne() {
        return "test";
    }

}

Посетите http://localhost:8080/repositoryRestControllerTest

Я надеюсь, что это объяснение прояснит для вас ситуацию.

Да, ты прав! Я понял это несколько дней назад, но забыл написать ответ на этот вопрос! В любом случае, спасибо !

gg ff 22.04.2019 19:08

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