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

时间:2019-04-14 12:43:56

标签: java spring spring-data-rest

我使用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,那么为什么它不起作用?

2 个答案:

答案 0 :(得分:1)

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

/{repository}/{id}/{column} URL是通过RepositoryPropertyReferenceController.followPropertyReference方法处理的。

/api/users/1/nameOne的意思是:获得ID为1的用户的nameOne列。重要的注意事项是:此列应引用另一个@Entity。这意味着,如果您有一个名为“姓”的String列,并且点击了URL /api/users/1/name,您将得到404,因为此列未引用另一个实体。如果您有一个名为school的列,它引用一个School实体,并且您访问了URL /api/users/1/school,那么您将获得该用户所引用的school实体。如果用户没有学校,那么您将再次获得404。

此外,如果您提供的URL与Spring Data Rest不冲突,则@RepositoryRestController可用于@RequestMapping

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

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

}

访问http://localhost:8080/repositoryRestControllerTest

我希望这个解释为您澄清一切。

答案 1 :(得分:0)

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

相关问题