无法理解为什么 RepositoryRestController 不起作用?

Cant understand why RepositoryRestController does not work?

我使用 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开机启动class:

    @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 的用户,那么为什么它不起作用?

如果 localhost:8080/api 是您的根上下文,那么 localhost:8080/api/users/1/nameOne 应该是您用于用户 GET 的 url。

它不起作用,因为您正在使用的 URL 结构在 Spring Data Rest 上下文中已经有意义。

/{repository}/{id}/{column} URL 在 RepositoryPropertyReferenceController.followPropertyReference 方法中处理。

/api/users/1/nameOne表示:获取id为1的用户的nameOne列。需要注意的是:该列应该引用另一个@Entity。这意味着如果您有一个名为 "surname" 的 String 列并且您点击 URL /api/users/1/name 您将得到 404,因为该列没有引用另一个实体。如果您有一个名为 school 的列引用了 School 实体,并且您点击了 URL /api/users/1/school,您将获得该用户引用的学校实体。如果用户没有学校那么你会再次得到 404。

此外,如果您提供的 URL 不与 Spring 数据剩余冲突,@RepositoryRestController 可用于 @RequestMapping

您可以使用以下示例进行测试:

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

}

访问http://localhost:8080/repositoryRestControllerTest

我希望这个解释能为您澄清一些事情。